├── docs
├── .nojekyll
├── logo.png
├── docsify@4
│ ├── uuid
│ │ └── esm-browser
│ │ │ ├── nil.js
│ │ │ ├── v3.js
│ │ │ ├── v5.js
│ │ │ ├── regex.js
│ │ │ ├── native.js
│ │ │ ├── validate.js
│ │ │ ├── version.js
│ │ │ ├── index.js
│ │ │ ├── v4.js
│ │ │ ├── rng.js
│ │ │ ├── parse.js
│ │ │ ├── stringify.js
│ │ │ ├── v35.js
│ │ │ ├── sha1.js
│ │ │ └── v1.js
│ ├── fonts.gstatic.com
│ │ ├── 6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2
│ │ ├── 6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2
│ │ ├── 6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu.woff2
│ │ └── L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW9.ttf
│ ├── fonts.googleapis.com
│ │ └── css
│ └── countable.min.js
├── assets
│ ├── 1_vs_install.png
│ └── 2_nodejs_c++_component.jpg
├── _sidebar.md
├── electron-mac-tray-icon-distortion.md
└── README.md
├── src
├── main
│ ├── utils
│ │ ├── index.js
│ │ ├── setTitle.js
│ │ └── openDialog.js
│ ├── sdk
│ │ ├── index.js
│ │ └── useSdk.js
│ ├── counter
│ │ ├── index.js
│ │ └── updateCounter.js
│ ├── log
│ │ └── index.js
│ ├── settings
│ │ ├── index.js
│ │ └── createWindow.js
│ ├── preload
│ │ ├── settings.js
│ │ └── index.js
│ ├── tray
│ │ └── index.js
│ ├── windows
│ │ └── mainWindow.js
│ └── background.js
└── renderer
│ ├── index
│ ├── assets
│ │ └── logo.png
│ ├── utils
│ │ └── updateCounter.js
│ ├── store
│ │ └── index.js
│ ├── App.vue
│ ├── main.js
│ ├── components
│ │ └── HelloWorld.vue
│ ├── views
│ │ ├── AboutView.vue
│ │ └── HomeView.vue
│ └── router
│ │ └── index.js
│ └── settings
│ ├── main.js
│ ├── views
│ ├── AboutView.vue
│ ├── GeneralView.vue
│ ├── ShortcutsView.vue
│ └── AccountView.vue
│ ├── App.vue
│ ├── router
│ └── index.js
│ └── components
│ └── Navbar.vue
├── .env.development
├── .env.win32.x64
├── .env.win32.ia32
├── .env.darwin.arm64
├── .env.darwin.x64
├── babel.config.js
├── public
├── logo.png
├── sdk
│ └── app1.dll
├── icons
│ ├── png
│ │ ├── icon.png
│ │ ├── 1024x1024.png
│ │ ├── 128x128.png
│ │ ├── 256x256.png
│ │ ├── 512x512.png
│ │ ├── icon@1.5x.png
│ │ ├── icon@2x.png
│ │ ├── icon@3x.png
│ │ └── icon@4x.png
│ ├── win
│ │ └── icon.ico
│ └── mac
│ │ └── icon.icns
├── settings.html
└── index.html
├── .env.darwin.universal
├── .husky
├── pre-commit
└── commit-msg
├── vue_devtools
├── icons
│ ├── 16.png
│ ├── 48.png
│ ├── 128.png
│ ├── 16-beta.png
│ ├── 16-gray.png
│ ├── 16.nuxt.png
│ ├── 48-beta.png
│ ├── 48-gray.png
│ ├── 48.nuxt.png
│ ├── 128-beta.png
│ ├── 128-gray.png
│ └── 128.nuxt.png
├── devtools-background.html
├── popups
│ ├── devtools-screenshot.png
│ ├── not-found.html
│ ├── disabled.html
│ ├── disabled.nuxt.html
│ ├── enabled.html
│ ├── enabled.nuxt.html
│ └── popup.css
├── build
│ ├── 2906.js.LICENSE.txt
│ ├── proxy.js
│ ├── devtools-background.js
│ ├── 1569.js
│ ├── 4896.js
│ ├── background.js
│ ├── 9741.js
│ ├── 6330.js
│ ├── 1594.js
│ ├── 3553.js
│ ├── 1585.js
│ ├── 3315.js
│ ├── 6331.js
│ ├── 7135.js
│ ├── 6022.js
│ ├── 8309.js
│ ├── 7125.js
│ ├── 3855.js
│ ├── 4035.js
│ ├── 3673.js
│ ├── 8147.js
│ ├── 4454.js
│ ├── 1593.js
│ ├── 491.js
│ ├── 3399.js
│ ├── 8677.js
│ ├── 868.js
│ ├── 4073.js
│ ├── 9342.js
│ ├── 5924.js
│ ├── 5669.js
│ ├── 2014.js
│ ├── 3504.js
│ ├── 1649.js
│ ├── 4511.js
│ ├── 6844.js
│ ├── 9953.js
│ ├── 8947.js
│ ├── 6792.js
│ ├── 3008.js
│ ├── 4610.js
│ ├── 5974.js
│ ├── 2906.js
│ ├── 7447.js
│ ├── 4558.js
│ ├── 4858.js
│ └── 6175.js
├── devtools.html
├── package.json
└── manifest.json
├── .editorconfig
├── .npmrc
├── commitlint.config.js
├── jsconfig.json
├── .gitignore
├── .prettierignore
├── .eslintignore
├── .prettierrc.cjs
├── LICENSE.txt
├── .github
└── workflows
│ ├── build-mac.yml
│ └── build-win.yml
├── README.md
├── crypto.js
├── package.json
├── CHANGELOG.md
├── .eslintrc.js
└── vue.config.js
/docs/.nojekyll:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/utils/index.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.env.development:
--------------------------------------------------------------------------------
1 | NODE_ENV=development
2 | # 正在打包安装包arch值
3 | VUE_APP_ARCH=arm64
--------------------------------------------------------------------------------
/.env.win32.x64:
--------------------------------------------------------------------------------
1 | NODE_ENV=production
2 | # 正在打包安装包arch值
3 | VUE_APP_PACK_ARCH=x64
--------------------------------------------------------------------------------
/.env.win32.ia32:
--------------------------------------------------------------------------------
1 | NODE_ENV=production
2 | # 正在打包安装包arch值
3 | VUE_APP_PACK_ARCH=ia32
--------------------------------------------------------------------------------
/.env.darwin.arm64:
--------------------------------------------------------------------------------
1 | NODE_ENV=production
2 | # 正在打包安装包arch值
3 | VUE_APP_PACK_ARCH=arm64
4 |
--------------------------------------------------------------------------------
/.env.darwin.x64:
--------------------------------------------------------------------------------
1 | NODE_ENV=production
2 | # 正在打包安装包arch值
3 | VUE_APP_PACK_ARCH=x64
4 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['@vue/cli-plugin-babel/preset']
3 | };
4 |
--------------------------------------------------------------------------------
/docs/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/logo.png
--------------------------------------------------------------------------------
/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/logo.png
--------------------------------------------------------------------------------
/.env.darwin.universal:
--------------------------------------------------------------------------------
1 | NODE_ENV=production
2 | # 正在打包安装包arch值
3 | VUE_APP_PACK_ARCH=universal
4 |
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/nil.js:
--------------------------------------------------------------------------------
1 | export default '00000000-0000-0000-0000-000000000000';
2 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
4 | npm run lint
5 |
--------------------------------------------------------------------------------
/public/sdk/app1.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/sdk/app1.dll
--------------------------------------------------------------------------------
/public/icons/png/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/icon.png
--------------------------------------------------------------------------------
/public/icons/win/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/win/icon.ico
--------------------------------------------------------------------------------
/vue_devtools/icons/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/16.png
--------------------------------------------------------------------------------
/vue_devtools/icons/48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/48.png
--------------------------------------------------------------------------------
/public/icons/mac/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/mac/icon.icns
--------------------------------------------------------------------------------
/vue_devtools/icons/128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/128.png
--------------------------------------------------------------------------------
/.husky/commit-msg:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
4 | npx --no -- commitlint --edit $1
5 |
--------------------------------------------------------------------------------
/docs/assets/1_vs_install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/assets/1_vs_install.png
--------------------------------------------------------------------------------
/public/icons/png/1024x1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/1024x1024.png
--------------------------------------------------------------------------------
/public/icons/png/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/128x128.png
--------------------------------------------------------------------------------
/public/icons/png/256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/256x256.png
--------------------------------------------------------------------------------
/public/icons/png/512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/512x512.png
--------------------------------------------------------------------------------
/public/icons/png/icon@1.5x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/icon@1.5x.png
--------------------------------------------------------------------------------
/public/icons/png/icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/icon@2x.png
--------------------------------------------------------------------------------
/public/icons/png/icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/icon@3x.png
--------------------------------------------------------------------------------
/public/icons/png/icon@4x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/icon@4x.png
--------------------------------------------------------------------------------
/vue_devtools/devtools-background.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/vue_devtools/icons/16-beta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/16-beta.png
--------------------------------------------------------------------------------
/vue_devtools/icons/16-gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/16-gray.png
--------------------------------------------------------------------------------
/vue_devtools/icons/16.nuxt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/16.nuxt.png
--------------------------------------------------------------------------------
/vue_devtools/icons/48-beta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/48-beta.png
--------------------------------------------------------------------------------
/vue_devtools/icons/48-gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/48-gray.png
--------------------------------------------------------------------------------
/vue_devtools/icons/48.nuxt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/48.nuxt.png
--------------------------------------------------------------------------------
/vue_devtools/icons/128-beta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/128-beta.png
--------------------------------------------------------------------------------
/vue_devtools/icons/128-gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/128-gray.png
--------------------------------------------------------------------------------
/vue_devtools/icons/128.nuxt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/128.nuxt.png
--------------------------------------------------------------------------------
/src/renderer/index/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/src/renderer/index/assets/logo.png
--------------------------------------------------------------------------------
/docs/assets/2_nodejs_c++_component.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/assets/2_nodejs_c++_component.jpg
--------------------------------------------------------------------------------
/src/main/sdk/index.js:
--------------------------------------------------------------------------------
1 | const useSdk = require('./useSdk.js');
2 |
3 | exports.initialize = function initialize() {
4 | useSdk();
5 | };
6 |
--------------------------------------------------------------------------------
/vue_devtools/popups/devtools-screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/popups/devtools-screenshot.png
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | [*.{js,jsx,ts,tsx,vue}]
2 | indent_style = space
3 | indent_size = 2
4 | trim_trailing_whitespace = true
5 | insert_final_newline = true
6 |
--------------------------------------------------------------------------------
/docs/_sidebar.md:
--------------------------------------------------------------------------------
1 | - [首页-快速开始](/)
2 |
3 | - [常见问题](/FrequentlyAskedQuestions.md)
4 |
5 | - [Electron Mac 系统托盘图标失真问题](/electron-mac-tray-icon-distortion.md)
6 |
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/v3.js:
--------------------------------------------------------------------------------
1 | import v35 from './v35.js';
2 | import md5 from './md5.js';
3 | const v3 = v35('v3', 0x30, md5);
4 | export default v3;
5 |
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/v5.js:
--------------------------------------------------------------------------------
1 | import v35 from './v35.js';
2 | import sha1 from './sha1.js';
3 | const v5 = v35('v5', 0x50, sha1);
4 | export default v5;
5 |
--------------------------------------------------------------------------------
/src/main/counter/index.js:
--------------------------------------------------------------------------------
1 | import updateCounter from './updateCounter.js';
2 |
3 | export function initialize(mainWindow) {
4 | updateCounter(mainWindow);
5 | }
6 |
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/regex.js:
--------------------------------------------------------------------------------
1 | export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
2 |
--------------------------------------------------------------------------------
/src/renderer/settings/main.js:
--------------------------------------------------------------------------------
1 | import {createApp} from 'vue';
2 | import App from './App.vue';
3 | import router from './router';
4 |
5 | createApp(App).use(router).mount('#app');
6 |
--------------------------------------------------------------------------------
/src/renderer/settings/views/AboutView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
This is an about page
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/renderer/settings/views/GeneralView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
This is an general page
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/native.js:
--------------------------------------------------------------------------------
1 | const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
2 | export default {
3 | randomUUID
4 | };
5 |
--------------------------------------------------------------------------------
/src/renderer/index/utils/updateCounter.js:
--------------------------------------------------------------------------------
1 | export default function updateCounter(event, data) {
2 | console.log('[event, data]', event, data);
3 | // counter.value = counter.value + 1;
4 | }
5 |
--------------------------------------------------------------------------------
/src/renderer/settings/views/ShortcutsView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
This is an shortcuts page
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | registry=https://registry.npm.taobao.org/
2 | electron_mirror=https://npm.taobao.org/mirrors/electron/
3 | electron_builder_binaries_mirror=https://npm.taobao.org/mirrors/electron-builder-binaries/
4 |
--------------------------------------------------------------------------------
/docs/docsify@4/fonts.gstatic.com/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/docsify@4/fonts.gstatic.com/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2
--------------------------------------------------------------------------------
/docs/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2
--------------------------------------------------------------------------------
/docs/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu.woff2
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/validate.js:
--------------------------------------------------------------------------------
1 | import REGEX from './regex.js';
2 |
3 | function validate(uuid) {
4 | return typeof uuid === 'string' && REGEX.test(uuid);
5 | }
6 |
7 | export default validate;
8 |
--------------------------------------------------------------------------------
/vue_devtools/popups/not-found.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Vue.js not detected
6 |
7 |
--------------------------------------------------------------------------------
/docs/docsify@4/fonts.gstatic.com/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW9.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/docsify@4/fonts.gstatic.com/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW9.ttf
--------------------------------------------------------------------------------
/src/renderer/index/store/index.js:
--------------------------------------------------------------------------------
1 | import {defineStore} from 'pinia';
2 | export const useUserStore = defineStore('userStore', {
3 | state: () => {
4 | return {};
5 | },
6 | getters: {},
7 | actions: {}
8 | });
9 |
--------------------------------------------------------------------------------
/commitlint.config.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-undef
2 | module.exports = {
3 | extends: ['@commitlint/config-conventional'],
4 | rules: {
5 | 'body-max-line-length': [0, 'always', Infinity] // 关闭正文行长度限制
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/src/renderer/index/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | Home |
4 | About
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/renderer/settings/views/AccountView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
This is an My Account page
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/renderer/index/main.js:
--------------------------------------------------------------------------------
1 | import {createApp} from 'vue';
2 | import App from './App.vue';
3 | import router from './router';
4 | import {createPinia} from 'pinia';
5 |
6 | const pinia = createPinia();
7 |
8 | createApp(App).use(pinia).use(router).mount('#app');
9 |
--------------------------------------------------------------------------------
/src/main/utils/setTitle.js:
--------------------------------------------------------------------------------
1 | import {BrowserWindow} from 'electron';
2 |
3 | export function handleSetTitle(event, title) {
4 | const webContents = event.sender;
5 | const mainWindow = BrowserWindow.fromWebContents(webContents);
6 | mainWindow.setTitle(title);
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/utils/openDialog.js:
--------------------------------------------------------------------------------
1 | import {dialog} from 'electron';
2 |
3 | export async function handleFileOpen() {
4 | const {canceled, filePaths} = await dialog.showOpenDialog();
5 | if (canceled) {
6 | return '';
7 | } else {
8 | return filePaths[0];
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/version.js:
--------------------------------------------------------------------------------
1 | import validate from './validate.js';
2 |
3 | function version(uuid) {
4 | if (!validate(uuid)) {
5 | throw TypeError('Invalid UUID');
6 | }
7 |
8 | return parseInt(uuid.slice(14, 15), 16);
9 | }
10 |
11 | export default version;
12 |
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "module": "esnext",
5 | "baseUrl": "./",
6 | "moduleResolution": "node",
7 | "paths": {
8 | "@/*": ["src/*"]
9 | },
10 | "lib": ["esnext", "dom", "dom.iterable", "scripthost"]
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/vue_devtools/build/2906.js.LICENSE.txt:
--------------------------------------------------------------------------------
1 | /*!---------------------------------------------------------------------------------------------
2 | * Copyright (C) David Owens II, owensd.io. All rights reserved.
3 | *--------------------------------------------------------------------------------------------*/
4 |
--------------------------------------------------------------------------------
/vue_devtools/popups/disabled.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Vue.js is detected on this page.
6 | Devtools inspection is not available because it's in
7 | production mode or explicitly disabled by the author.
8 |
9 |
--------------------------------------------------------------------------------
/vue_devtools/popups/disabled.nuxt.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Nuxt + Vue.js is detected on this page.
6 | Devtools inspection is not available because it's in
7 | production mode or explicitly disabled by the author.
8 |
9 |
--------------------------------------------------------------------------------
/src/renderer/index/components/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ msg }}
4 |
5 |
6 |
7 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
25 | #Electron-builder output
26 | /dist_electron
27 |
28 | *.log
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/index.js:
--------------------------------------------------------------------------------
1 | export {default as v1} from './v1.js';
2 | export {default as v3} from './v3.js';
3 | export {default as v4} from './v4.js';
4 | export {default as v5} from './v5.js';
5 | export {default as NIL} from './nil.js';
6 | export {default as version} from './version.js';
7 | export {default as validate} from './validate.js';
8 | export {default as stringify} from './stringify.js';
9 | export {default as parse} from './parse.js';
10 |
--------------------------------------------------------------------------------
/src/main/log/index.js:
--------------------------------------------------------------------------------
1 | const electronLog = require('electron-log');
2 | const {app} = require('electron');
3 | const path = require('path');
4 |
5 | const log = electronLog.create('main-process');
6 |
7 | log.transports.file.resolvePath = () => path.join(app.getPath('userData'), 'logs/main.log');
8 | log.transports.file.format = '[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}] {text}';
9 |
10 | log.transports.file.level = true;
11 | log.transports.console.level = true;
12 |
13 | module.exports = log;
14 |
--------------------------------------------------------------------------------
/vue_devtools/devtools.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/vue_devtools/build/proxy.js:
--------------------------------------------------------------------------------
1 | (()=>{const e=chrome.runtime.connect({name:"content-script"});function n(e){window.postMessage({source:"vue-devtools-proxy",payload:e},"*")}function t(t){t.data&&"vue-devtools-backend"===t.data.source?e.postMessage(t.data.payload):t.data&&"vue-devtools-backend-injection"===t.data.source&&"listening"===t.data.payload&&n("init")}function o(){window.removeEventListener("message",t),n("shutdown")}e.onMessage.addListener(n),window.addEventListener("message",t),e.onDisconnect.addListener(o),n("init")})();
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | .DS_Store
12 | /qa
13 | /rd
14 | /prod
15 | dist
16 | dist-ssr
17 | coverage
18 | *.local
19 |
20 | /cypress/videos/
21 | /cypress/screenshots/
22 |
23 | # Editor directories and files
24 | .vscode/*
25 | !.vscode/extensions.json
26 | .idea
27 | *.suo
28 | *.ntvs*
29 | *.njsproj
30 | *.sln
31 | *.sw?
32 |
33 | /docs/docsify@4
34 | .nojekyll
35 | #Electron-builder output
36 | /dist_electron
37 | /vue_devtools
--------------------------------------------------------------------------------
/vue_devtools/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@vue-devtools/shell-chrome",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "build": "rimraf ./build && cross-env NODE_ENV=production webpack --progress"
6 | },
7 | "dependencies": {
8 | "@vue-devtools/app-backend-core": "^0.0.0",
9 | "@vue-devtools/app-frontend": "^0.0.0",
10 | "@vue-devtools/shared-utils": "^0.0.0"
11 | },
12 | "devDependencies": {
13 | "@vue-devtools/build-tools": "^0.0.0",
14 | "rimraf": "^3.0.2",
15 | "webpack": "^5.35.1",
16 | "webpack-cli": "^4.6.0"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | .DS_Store
12 | /qa
13 | /rd
14 | /prod
15 | dist
16 | dist-ssr
17 | coverage
18 | *.local
19 |
20 | /cypress/videos/
21 | /cypress/screenshots/
22 |
23 | # Editor directories and files
24 | .vscode/*
25 | !.vscode/extensions.json
26 | .idea
27 | *.suo
28 | *.ntvs*
29 | *.njsproj
30 | *.sln
31 | *.sw?
32 |
33 | # 文档文件
34 | docs/docsify@4
35 |
36 | .husky
37 |
38 | #Electron-builder output
39 | /dist_electron
40 |
41 | /vue_devtools
--------------------------------------------------------------------------------
/src/renderer/settings/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
11 |
34 |
--------------------------------------------------------------------------------
/vue_devtools/popups/enabled.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Vue.js is detected on this page.
12 | Open DevTools and look for the Vue panel.
13 |
14 |
15 |
16 | Troubleshooting
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/vue_devtools/popups/enabled.nuxt.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Nuxt + Vue.js is detected on this page.
12 | Open DevTools and look for the Vue panel.
13 |
14 |
15 |
16 | Troubleshooting
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/vue_devtools/build/devtools-background.js:
--------------------------------------------------------------------------------
1 | (()=>{let e=!1,n=0;chrome.devtools.network.onNavigated.addListener(t);const o=setInterval(t,1e3);function t(){e||n++>10?clearInterval(o):chrome.devtools.inspectedWindow.eval("!!(window.__VUE_DEVTOOLS_GLOBAL_HOOK__ && (window.__VUE_DEVTOOLS_GLOBAL_HOOK__.Vue || window.__VUE_DEVTOOLS_GLOBAL_HOOK__.apps.length))",(function(n){n&&!e&&(clearInterval(o),e=!0,chrome.devtools.panels.create("Vue","icons/128.png","devtools.html",(e=>{e.onShown.addListener(d),e.onHidden.addListener(_)})))}))}function d(){chrome.runtime.sendMessage("vue-panel-shown")}function _(){chrome.runtime.sendMessage("vue-panel-hidden")}t()})();
--------------------------------------------------------------------------------
/public/settings.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Settings
9 |
10 |
11 |
12 | We're sorry but Settings doesn't work properly without JavaScript enabled. Please
14 | enable it to continue.
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/renderer/index/views/AboutView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
This is an about page
4 |
主进程传过来的{{ counter }}
5 |
6 |
7 |
8 |
27 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <%= htmlWebpackPlugin.options.title %>
9 |
10 |
11 |
12 | We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please
14 | enable it to continue.
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/renderer/index/router/index.js:
--------------------------------------------------------------------------------
1 | import {createRouter, createWebHashHistory} from 'vue-router';
2 | import HomeView from '../views/HomeView.vue';
3 |
4 | const routes = [
5 | {
6 | path: '/',
7 | name: 'home',
8 | component: HomeView
9 | },
10 | {
11 | path: '/about',
12 | name: 'about',
13 | // route level code-splitting
14 | // this generates a separate chunk (about.[hash].js) for this route
15 | // which is lazy-loaded when the route is visited.
16 | component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
17 | }
18 | ];
19 |
20 | const router = createRouter({
21 | history: createWebHashHistory(process.env.BASE_URL),
22 | routes
23 | });
24 |
25 | export default router;
26 |
--------------------------------------------------------------------------------
/docs/electron-mac-tray-icon-distortion.md:
--------------------------------------------------------------------------------
1 | # Electron Mac 系统托盘图标失真问题
2 |
3 | 我们使用 `electron-icon-builder` 方式生成的 electron 图标
4 |
5 | ```bash
6 | electron-icon-builder --input=./public/logo.png --output=./public/
7 | ```
8 |
9 | 例如下面:
10 |
11 | ```txt
12 | 16x16.png
13 | 24x24.png
14 | 32x32.png
15 | 48x48.png
16 | 64x64.png
17 | ```
18 |
19 | 把上面的内容修改为下面的形式就可以了
20 |
21 | ```txt
22 | icon.png
23 | icon@1.5.png
24 | icon@2.png
25 | icon@3.png
26 | icon@4.png
27 | ```
28 |
29 | 系统托盘使用的地方
30 |
31 | ```js
32 | const iconPath = process.platform === 'win32' ? 'win/icon.ico' : 'png/icon.png';
33 |
34 | const tray = new Tray(path.join(__static, `icons/${iconPath}`));
35 | ```
36 |
37 | 参考地址: https://www.electronjs.org/zh/docs/latest/api/native-image#%E9%AB%98%E5%88%86%E8%BE%A8%E7%8E%87
38 |
--------------------------------------------------------------------------------
/src/main/counter/updateCounter.js:
--------------------------------------------------------------------------------
1 | import {app, Menu} from 'electron';
2 |
3 | export default function updateCounter(mainWindow) {
4 | // setInterval(() => {
5 |
6 | // mainWindow.webContents.send('update-counter', 1);
7 | // }, 3000);
8 | // const menu = Menu.buildFromTemplate([
9 | // {
10 | // label: app.name,
11 | // submenu: [
12 | // {
13 | // click: () => mainWindow.webContents.send('update-counter', 1),
14 | // label: 'Increment'
15 | // },
16 | // {
17 | // click: () => mainWindow.webContents.send('update-counter', -1),
18 | // label: 'Decrement'
19 | // }
20 | // ]
21 | // }
22 | // ]);
23 |
24 | // Menu.setApplicationMenu(menu);
25 | }
26 |
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/v4.js:
--------------------------------------------------------------------------------
1 | import native from './native.js';
2 | import rng from './rng.js';
3 | import {unsafeStringify} from './stringify.js';
4 |
5 | function v4(options, buf, offset) {
6 | if (native.randomUUID && !buf && !options) {
7 | return native.randomUUID();
8 | }
9 |
10 | options = options || {};
11 | const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
12 |
13 | rnds[6] = (rnds[6] & 0x0f) | 0x40;
14 | rnds[8] = (rnds[8] & 0x3f) | 0x80; // Copy bytes to buffer, if provided
15 |
16 | if (buf) {
17 | offset = offset || 0;
18 |
19 | for (let i = 0; i < 16; ++i) {
20 | buf[offset + i] = rnds[i];
21 | }
22 |
23 | return buf;
24 | }
25 |
26 | return unsafeStringify(rnds);
27 | }
28 |
29 | export default v4;
30 |
--------------------------------------------------------------------------------
/vue_devtools/build/1569.js:
--------------------------------------------------------------------------------
1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[1569],{51569:(e,t,s)=>{s.r(t),s.d(t,{conf:()=>n,language:()=>o});var n={comments:{lineComment:"#"}},o={defaultToken:"keyword",ignoreCase:!0,tokenPostfix:".azcli",str:/[^#\s]/,tokenizer:{root:[{include:"@comment"},[/\s-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}],[/^-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}]],type:[{include:"@comment"},[/-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":"key.identifier"}}],[/@str+\s*/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}]],comment:[[/#.*$/,{cases:{"@eos":{token:"comment",next:"@popall"}}}]]}}}}]);
--------------------------------------------------------------------------------
/docs/docsify@4/fonts.googleapis.com/css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Roboto Mono';
3 | font-style: normal;
4 | font-weight: 400;
5 | src: url(/docsify@4/fonts.gstatic.com/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW9.ttf) format('truetype');
6 | }
7 | @font-face {
8 | font-family: 'Source Sans Pro';
9 | font-style: normal;
10 | font-weight: 300;
11 | src: url(/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdr.ttf) format('truetype');
12 | }
13 | @font-face {
14 | font-family: 'Source Sans Pro';
15 | font-style: normal;
16 | font-weight: 400;
17 | src: url(/docsify@4/fonts.gstatic.com/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7g.ttf) format('truetype');
18 | }
19 | @font-face {
20 | font-family: 'Source Sans Pro';
21 | font-style: normal;
22 | font-weight: 600;
23 | src: url(/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdr.ttf) format('truetype');
24 | }
25 |
--------------------------------------------------------------------------------
/src/renderer/settings/router/index.js:
--------------------------------------------------------------------------------
1 | import {createRouter, createWebHashHistory} from 'vue-router';
2 | import AccountView from '../views/AccountView.vue';
3 | import AboutView from '../views/AboutView.vue';
4 | import GeneralView from '../views/GeneralView.vue';
5 | import ShortcutsView from '../views/ShortcutsView.vue';
6 |
7 | const routes = [
8 | {
9 | path: '/',
10 | name: 'Account',
11 | component: AccountView
12 | },
13 | {
14 | path: '/general',
15 | name: 'General',
16 | component: GeneralView
17 | },
18 | {
19 | path: '/shortcuts',
20 | name: 'Shortcuts',
21 | component: ShortcutsView
22 | },
23 | {
24 | path: '/about',
25 | name: 'about',
26 | component: AboutView
27 | }
28 | ];
29 |
30 | const router = createRouter({
31 | history: createWebHashHistory(process.env.BASE_URL),
32 | routes
33 | });
34 |
35 | export default router;
36 |
--------------------------------------------------------------------------------
/vue_devtools/popups/popup.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700,700i');
2 |
3 | body {
4 | font-family: Roboto, Avenir, Helvetica, Arial, sans-serif;
5 | font-size: 14px;
6 | font-weight: 400;
7 | line-height: 1.4;
8 | padding: 18px 24px;
9 | color: #2c3e50;
10 | }
11 |
12 | body,
13 | p {
14 | margin: 0;
15 | }
16 |
17 | p {
18 | min-width: 200px;
19 | max-width: 300px;
20 | }
21 |
22 | .short-paragraph {
23 | min-width: initial;
24 | white-space: nowrap;
25 | }
26 |
27 | a {
28 | color: #42B983;
29 | }
30 |
31 | .flex {
32 | display: flex;
33 | align-items: center;
34 | }
35 |
36 | .screenshot {
37 | position: relative;
38 | }
39 |
40 | .screenshot > img {
41 | width: 140px;
42 | height: 140px;
43 | object-fit: cover;
44 | border-radius: 100%;
45 | margin-right: 24px;
46 | box-shadow: 0 0 15px rgb(0 0 0 / 10%);
47 | }
48 |
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/rng.js:
--------------------------------------------------------------------------------
1 | // Unique ID creation requires a high quality random # generator. In the browser we therefore
2 | // require the crypto API and do not support built-in fallback to lower quality random number
3 | // generators (like Math.random()).
4 | let getRandomValues;
5 | const rnds8 = new Uint8Array(16);
6 | export default function rng() {
7 | // lazy load so that environments that need to polyfill have a chance to do so
8 | if (!getRandomValues) {
9 | // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
10 | getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
11 |
12 | if (!getRandomValues) {
13 | throw new Error(
14 | 'crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'
15 | );
16 | }
17 | }
18 |
19 | return getRandomValues(rnds8);
20 | }
21 |
--------------------------------------------------------------------------------
/.prettierrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | // 使用 prettier 的配置 schema。
3 | $schema: 'https://json.schemastore.org/prettierrc',
4 | arrowParens: 'always', // 将箭头函数的参数始终用括号包裹起来。
5 | bracketSameLine: true, // 在同一行中书写对象大括号和数组大括号。
6 | bracketSpacing: false, // 在对象大括号内不添加空格。
7 | embeddedLanguageFormatting: 'auto', // 根据需要自动格式化嵌入式语言,如在模板字符串中的 JavaScript 代码。
8 | htmlWhitespaceSensitivity: 'css', // HTML 空格敏感性使用 css。
9 | jsxSingleQuote: false, // 不使用单引号而是使用双引号来包裹 JSX 属性。
10 | printWidth: 120, // 设置每行的字符数限制,超过则格式化。
11 | proseWrap: 'preserve', // 不在 markdown 文件中强制断行。
12 | quoteProps: 'as-needed', // 只有在必要时才将属性名称用引号包裹起来,例如包含空格或保留关键字的属性名。
13 | insertPragma: false, // 不插入任何格式化代码,例如 Prettier 的特殊注释。
14 | requirePragma: false, // 不要在格式化的文件中要求使用特殊注释。
15 | semi: true, // 在语句末尾添加分号。
16 | singleQuote: true, // 使用单引号而不是双引号。
17 | tabWidth: 2, // 设置一个 tab 的宽度。
18 | trailingComma: 'none', // 不在多行的末尾添加逗号。
19 | useTabs: false, // 使用空格而不是制表符来缩进。
20 | vueIndentScriptAndStyle: false // 不缩进 .vue 文件中的
40 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 - present 李钟意
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.github/workflows/build-mac.yml:
--------------------------------------------------------------------------------
1 | name: Build and Release for MacOS
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | tags:
8 | - '*'
9 | jobs:
10 | build:
11 | runs-on: macos-latest
12 |
13 | steps:
14 | - name: Checkout code
15 | uses: actions/checkout@v2
16 |
17 | - name: Set up Python 3.x
18 | uses: actions/setup-python@v2
19 | with:
20 | python-version: 3.x # Here we specify Python 3.x
21 |
22 | - name: Get Python Path
23 | run: |
24 | echo "PYTHON_PATH=$(which python3)" >> $GITHUB_ENV # Updated to python3
25 | echo "Python Path: $PYTHON_PATH"
26 |
27 | - name: Install Node.js
28 | uses: actions/setup-node@v2
29 | with:
30 | node-version: 18
31 | - name: Install dependencies
32 | run: npm install npm install --ignore-engines --legacy-peer-deps
33 |
34 | - name: Build
35 | run: npm run build:mac
36 |
37 | - name: Release
38 | uses: softprops/action-gh-release@v1
39 | with:
40 | files: |
41 | dist_electron/*.dmg
42 | dist_electron/*.zip
43 | env:
44 | GITHUB_TOKEN: ${{ secrets.ELECTRON_TEMPLATE_TOKEN }}
45 |
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/parse.js:
--------------------------------------------------------------------------------
1 | import validate from './validate.js';
2 |
3 | function parse(uuid) {
4 | if (!validate(uuid)) {
5 | throw TypeError('Invalid UUID');
6 | }
7 |
8 | let v;
9 | const arr = new Uint8Array(16); // Parse ########-....-....-....-............
10 |
11 | arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
12 | arr[1] = (v >>> 16) & 0xff;
13 | arr[2] = (v >>> 8) & 0xff;
14 | arr[3] = v & 0xff; // Parse ........-####-....-....-............
15 |
16 | arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
17 | arr[5] = v & 0xff; // Parse ........-....-####-....-............
18 |
19 | arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
20 | arr[7] = v & 0xff; // Parse ........-....-....-####-............
21 |
22 | arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
23 | arr[9] = v & 0xff; // Parse ........-....-....-....-############
24 | // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
25 |
26 | arr[10] = ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff;
27 | arr[11] = (v / 0x100000000) & 0xff;
28 | arr[12] = (v >>> 24) & 0xff;
29 | arr[13] = (v >>> 16) & 0xff;
30 | arr[14] = (v >>> 8) & 0xff;
31 | arr[15] = v & 0xff;
32 | return arr;
33 | }
34 |
35 | export default parse;
36 |
--------------------------------------------------------------------------------
/.github/workflows/build-win.yml:
--------------------------------------------------------------------------------
1 | name: Build and Release for Windows
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | tags:
8 | - '*'
9 | jobs:
10 | build:
11 | runs-on: windows-latest
12 |
13 | steps:
14 | - name: Checkout code
15 | uses: actions/checkout@v2
16 |
17 | - name: Set up Python 3.9
18 | uses: actions/setup-python@v2
19 | with:
20 | python-version: 3.9
21 |
22 | - name: Get Python Path
23 | run: |
24 | echo "PYTHON_PATH=$(where python | select -first 1)" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
25 | echo "Python Path: $env:PYTHON_PATH"
26 |
27 | - name: Install Node.js
28 | uses: actions/setup-node@v2
29 | with:
30 | node-version: 18
31 |
32 | - name: Install dependencies
33 | run: npm install --ignore-engines --legacy-peer-deps
34 |
35 | - name: Build
36 | run: npm run electron:build
37 |
38 | - name: Release
39 | uses: softprops/action-gh-release@v1
40 | with:
41 | files: |
42 | dist_electron/*.exe
43 | dist_electron/*.msi
44 | dist_electron/*.zip
45 | env:
46 | GITHUB_TOKEN: ${{ secrets.ELECTRON_TEMPLATE_TOKEN }}
47 |
--------------------------------------------------------------------------------
/src/main/preload/settings.js:
--------------------------------------------------------------------------------
1 | const {contextBridge, ipcRenderer} = require('electron');
2 |
3 | contextBridge.exposeInMainWorld('electronAPI', {
4 | send: (channel, data) => {
5 | // whitelist channels
6 | const validChannels = ['toMain_settings'];
7 | if (validChannels.includes(channel)) {
8 | ipcRenderer.send(channel, data);
9 | }
10 | },
11 | receive: (channel, func) => {
12 | const validChannels = ['fromMain'];
13 | if (validChannels.includes(channel)) {
14 | // 解决无法removeListener问题
15 | // https://github.com/reZach/secure-electron-template/issues/43#issuecomment-772303787
16 | const subscription = (event, ...args) => func(event, ...args);
17 | ipcRenderer.on(channel, subscription);
18 | return () => {
19 | ipcRenderer.removeListener(channel, subscription);
20 | };
21 | }
22 | },
23 | once: (channel, callback) => {
24 | const validChannels = ['fromMain'];
25 | if (validChannels.includes(channel)) {
26 | const newCallback = (_, data) => callback(data);
27 | ipcRenderer.once(channel, newCallback);
28 | }
29 | },
30 | removeAllListeners: (channel) => {
31 | const validChannels = ['fromMain'];
32 | if (validChannels.includes(channel)) {
33 | ipcRenderer.removeAllListeners(channel);
34 | }
35 | }
36 | });
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Electron Template
2 |
3 | Electron Template 是一个基于 [vue-cli-plugin-electron-builder](https://github.com/nklayman/vue-cli-plugin-electron-builder) 框架的开源项目模板。
4 |
5 | ## 基于该模版开发的项目案例
6 |
7 | electron + vue3 + element-plus + pinia: https://github.com/xieerduos/electron-ffmpeg-video-to-gif
8 |
9 | ## 快速开始
10 |
11 | ### 安装项目依赖
12 |
13 | ```
14 | npm install
15 | ```
16 |
17 | 安装过程中遇到问题?
18 |
19 | ```
20 | npm install --ignore-engines --legacy-peer-deps
21 | ```
22 |
23 | ### 启动项目
24 |
25 | ```
26 | npm start
27 | ```
28 |
29 | ### 打包构建
30 |
31 | ```
32 | npm run electron:build
33 | ```
34 |
35 | ### 代码检查和修复
36 |
37 | ```
38 | npm run lint
39 | ```
40 |
41 | ## 自定义配置
42 |
43 | Vue Cli https://cli.vuejs.org/config/
44 |
45 | vue-cli-plugin-electron-builder https://github.com/nklayman/vue-cli-plugin-electron-builder
46 |
47 | ## 生成图标
48 |
49 | https://www.npmjs.com/package/electron-icon-builder
50 |
51 | 把 public/logo.png 换成你自己的,运行下面命令
52 |
53 | ```bash
54 | npm run logo
55 | ```
56 |
57 | Electron Mac 系统托盘图标失真问题[electron-mac-tray-icon-distortion.md](docs/electron-mac-tray-icon-distortion.md)
58 |
59 | ## 常见问题
60 |
61 | 遇到问题了?可以先看看这里[docs/FrequentlyAskedQuestions.md](docs/FrequentlyAskedQuestions.md)有没有答案
62 |
63 | ## License
64 |
65 | Copyright (c) 李钟意.
66 |
67 | Licensed under the [MIT](LICENSE.txt) license.
68 |
--------------------------------------------------------------------------------
/src/main/settings/createWindow.js:
--------------------------------------------------------------------------------
1 | const {BrowserWindow} = require('electron');
2 | const path = require('path');
3 |
4 | async function createWindow() {
5 | // Create the browser window.
6 | const settingsWindow = new BrowserWindow({
7 | width: 550,
8 | height: 470,
9 | autoHideMenuBar: true, // 自动隐藏菜单
10 | // eslint-disable-next-line no-undef
11 | icon: path.join(__static, 'icons/win/icon.ico'),
12 | webPreferences: {
13 | // eslint-disable-next-line no-undef
14 | preload: path.join(__dirname, 'settingsWindow.js'),
15 | // Use pluginOptions.nodeIntegration, leave this alone
16 | // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
17 | nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
18 | contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION
19 | }
20 | });
21 |
22 | if (process.env.WEBPACK_DEV_SERVER_URL) {
23 | // Load the url of the dev server if in development mode
24 | await settingsWindow.loadURL(process.env.WEBPACK_DEV_SERVER_URL + 'settings.html');
25 | if (!process.env.IS_TEST) settingsWindow.webContents.openDevTools();
26 | } else {
27 | // Load the index.html when not in development
28 | settingsWindow.loadURL('app://./settings.html');
29 | }
30 | return settingsWindow;
31 | }
32 |
33 | module.exports = createWindow;
34 |
--------------------------------------------------------------------------------
/vue_devtools/build/background.js:
--------------------------------------------------------------------------------
1 | (()=>{const e={};function n(e){return+e+""===e}function o(n){chrome.tabs.executeScript(n,{file:"/build/proxy.js"},(function(o){o||e[n].devtools.postMessage("proxy-fail")}))}function t(n,o,t){function s(e){if("log"===e.event)return console.log("tab "+n,e.payload);t.postMessage(e)}function a(e){if("log"===e.event)return console.log("tab "+n,e.payload);o.postMessage(e)}function c(){o.onMessage.removeListener(s),t.onMessage.removeListener(a),o.disconnect(),t.disconnect(),e[n]=null}o.onMessage.addListener(s),t.onMessage.addListener(a),o.onDisconnect.addListener(c),t.onDisconnect.addListener(c)}chrome.runtime.onConnect.addListener((s=>{let a,c;n(s.name)?(a=s.name,c="devtools",o(+s.name)):(a=s.sender.tab.id,c="backend"),e[a]||(e[a]={devtools:null,backend:null}),e[a][c]=s,e[a].devtools&&e[a].backend&&t(a,e[a].devtools,e[a].backend)})),chrome.runtime.onMessage.addListener(((e,n)=>{if(n.tab&&e.vueDetected){const o=e.nuxtDetected?".nuxt":"";chrome.browserAction.setIcon({tabId:n.tab.id,path:{16:`icons/16${o}.png`,48:`icons/48${o}.png`,128:`icons/128${o}.png`}}),chrome.browserAction.setPopup({tabId:n.tab.id,popup:e.devtoolsEnabled?`popups/enabled${o}.html`:`popups/disabled${o}.html`})}"vue-take-screenshot"===e.action&&"devtools_child"===n.envType&&browser.tabs.captureVisibleTab({format:"png"}).then((n=>{browser.runtime.sendMessage({action:"vue-screenshot-result",id:e.id,dataUrl:n})}))}))})();
--------------------------------------------------------------------------------
/vue_devtools/build/9741.js:
--------------------------------------------------------------------------------
1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[9741],{39741:(t,e,r)=>{r.r(e),r.d(e,{conf:()=>s,language:()=>o});var s={brackets:[],autoClosingPairs:[],surroundingPairs:[]},o={keywords:[],typeKeywords:[],tokenPostfix:".csp",operators:[],symbols:/[=> {
33 | return origCreateHash(alg === 'md4' ? 'md5' : alg, opts);
34 | };
35 | }
36 | };
37 |
--------------------------------------------------------------------------------
/src/main/preload/index.js:
--------------------------------------------------------------------------------
1 | const {contextBridge, ipcRenderer} = require('electron');
2 |
3 | contextBridge.exposeInMainWorld('electronAPI', {
4 | setTitle: (title) => ipcRenderer.send('set-title', title),
5 | openFile: () => ipcRenderer.invoke('dialog:openFile'),
6 | onShowMessage: (callback) => ipcRenderer.on('show-message', callback),
7 | send: (channel, data) => {
8 | // whitelist channels
9 | const validChannels = ['toMain'];
10 | if (validChannels.includes(channel)) {
11 | ipcRenderer.send(channel, data);
12 | }
13 | },
14 | receive: (channel, func) => {
15 | const validChannels = ['fromMain', 'update-counter'];
16 | if (validChannels.includes(channel)) {
17 | // 解决无法removeListener问题
18 | // https://github.com/reZach/secure-electron-template/issues/43#issuecomment-772303787
19 | const subscription = (event, ...args) => func(event, ...args);
20 | ipcRenderer.on(channel, subscription);
21 | return () => {
22 | ipcRenderer.removeListener(channel, subscription);
23 | };
24 | }
25 | },
26 | once: (channel, callback) => {
27 | const validChannels = ['fromMain'];
28 | if (validChannels.includes(channel)) {
29 | const newCallback = (_, data) => callback(data);
30 | ipcRenderer.once(channel, newCallback);
31 | }
32 | },
33 | removeAllListeners: (channel) => {
34 | const validChannels = ['fromMain', 'update-counter'];
35 | if (validChannels.includes(channel)) {
36 | ipcRenderer.removeAllListeners(channel);
37 | }
38 | }
39 | });
40 |
--------------------------------------------------------------------------------
/vue_devtools/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "update_url": "https://clients2.google.com/service/update2/crx",
3 |
4 | "name": "Vue.js devtools",
5 | "version": "6.5.1",
6 | "version_name": "6.5.1",
7 | "description": "Browser DevTools extension for debugging Vue.js applications.",
8 | "manifest_version": 2,
9 | "icons": {
10 | "16": "icons/16.png",
11 | "48": "icons/48.png",
12 | "128": "icons/128.png"
13 | },
14 | "browser_action": {
15 | "default_icon": {
16 | "16": "icons/16-gray.png",
17 | "48": "icons/48-gray.png",
18 | "128": "icons/128-gray.png"
19 | },
20 | "default_title": "Vue Devtools",
21 | "default_popup": "popups/not-found.html"
22 | },
23 | "web_accessible_resources": [
24 | "devtools.html",
25 | "devtools-background.html",
26 | "build/backend.js"
27 | ],
28 | "devtools_page": "devtools-background.html",
29 | "background": {
30 | "scripts": [
31 | "build/background.js"
32 | ],
33 | "persistent": true
34 | },
35 | "permissions": [
36 | "",
37 | "storage"
38 | ],
39 | "content_scripts": [
40 | {
41 | "matches": [
42 | ""
43 | ],
44 | "js": [
45 | "build/hook.js"
46 | ],
47 | "run_at": "document_start"
48 | },
49 | {
50 | "matches": [
51 | ""
52 | ],
53 | "js": [
54 | "build/detector.js"
55 | ],
56 | "run_at": "document_idle"
57 | }
58 | ],
59 | "content_security_policy": "script-src 'self'; object-src 'self'"
60 | }
--------------------------------------------------------------------------------
/src/renderer/settings/components/Navbar.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
35 |
36 |
60 |
--------------------------------------------------------------------------------
/docs/docsify@4/countable.min.js:
--------------------------------------------------------------------------------
1 | var defaultOptions = {
2 | countable: !0,
3 | position: 'top',
4 | margin: '10px',
5 | float: 'right',
6 | fontsize: '0.9em',
7 | color: 'rgb(90,90,90)',
8 | language: 'english',
9 | isExpected: !0
10 | };
11 | function plugin(t, n) {
12 | if (!defaultOptions.countable) return;
13 | let o;
14 | t.beforeEach(function (t) {
15 | return (o = t.match(/([\u4e00-\u9fa5]+?|[a-zA-Z0-9]+)/g).length), t;
16 | }),
17 | t.afterEach(function (t, n) {
18 | let i = o + ' words',
19 | e = Math.ceil(o / 400) + ' min';
20 | 'chinese' === defaultOptions.language && ((i = o + ' 字'), (e = Math.ceil(o / 400) + ' 分钟')),
21 | n(
22 | `\n ${'bottom' === defaultOptions.position ? t : ''}\n \n
\n ${i}\n ${
29 | defaultOptions.isExpected ? ` | ${e}` : ''
30 | }\n \n
\n
\n ${
31 | 'bottom' !== defaultOptions.position ? t : ''
32 | }\n `
33 | );
34 | });
35 | }
36 | (window.$docsify.count = Object.assign(defaultOptions, window.$docsify.count)),
37 | (window.$docsify.plugins = [].concat(plugin, window.$docsify.plugins));
38 |
--------------------------------------------------------------------------------
/vue_devtools/build/6330.js:
--------------------------------------------------------------------------------
1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[6330],{6330:(e,o,n)=>{n.r(o),n.d(o,{conf:()=>s,language:()=>t});var s={comments:{lineComment:";",blockComment:["#|","|#"]},brackets:[["(",")"],["{","}"],["[","]"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}]},t={defaultToken:"",ignoreCase:!0,tokenPostfix:".scheme",brackets:[{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"}],keywords:["case","do","let","loop","if","else","when","cons","car","cdr","cond","lambda","lambda*","syntax-rules","format","set!","quote","eval","append","list","list?","member?","load"],constants:["#t","#f"],operators:["eq?","eqv?","equal?","and","or","not","null?"],tokenizer:{root:[[/#[xXoObB][0-9a-fA-F]+/,"number.hex"],[/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?/,"number.float"],[/(?:\b(?:(define|define-syntax|define-macro))\b)(\s+)((?:\w|\-|\!|\?)*)/,["keyword","white","variable"]],{include:"@whitespace"},{include:"@strings"},[/[a-zA-Z_#][a-zA-Z0-9_\-\?\!\*]*/,{cases:{"@keywords":"keyword","@constants":"constant","@operators":"operators","@default":"identifier"}}]],comment:[[/[^\|#]+/,"comment"],[/#\|/,"comment","@push"],[/\|#/,"comment","@pop"],[/[\|#]/,"comment"]],whitespace:[[/[ \t\r\n]+/,"white"],[/#\|/,"comment","@comment"],[/;.*$/,"comment"]],strings:[[/"$/,"string","@popall"],[/"(?=.)/,"string","@multiLineString"]],multiLineString:[[/[^\\"]+$/,"string","@popall"],[/[^\\"]+/,"string"],[/\\./,"string.escape"],[/"/,"string","@popall"],[/\\$/,"string"]]}}}}]);
--------------------------------------------------------------------------------
/vue_devtools/build/1594.js:
--------------------------------------------------------------------------------
1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[1594],{71594:(e,o,n)=>{n.r(o),n.d(o,{conf:()=>t,language:()=>r});var t={comments:{lineComment:"'"},brackets:[["(",")"],["[","]"],["If","EndIf"],["While","EndWhile"],["For","EndFor"],["Sub","EndSub"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]}]},r={defaultToken:"",tokenPostfix:".sb",ignoreCase:!0,brackets:[{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"keyword.tag-if",open:"If",close:"EndIf"},{token:"keyword.tag-while",open:"While",close:"EndWhile"},{token:"keyword.tag-for",open:"For",close:"EndFor"},{token:"keyword.tag-sub",open:"Sub",close:"EndSub"}],keywords:["Else","ElseIf","EndFor","EndIf","EndSub","EndWhile","For","Goto","If","Step","Sub","Then","To","While"],tagwords:["If","Sub","While","For"],operators:[">","<","<>","<=",">=","And","Or","+","-","*","/","="],identifier:/[a-zA-Z_][\w]*/,symbols:/[=><:+\-*\/%\.,]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[{include:"@whitespace"},[/(@identifier)(?=[.])/,"type"],[/@identifier/,{cases:{"@keywords":{token:"keyword.$0"},"@operators":"operator","@default":"variable.name"}}],[/([.])(@identifier)/,{cases:{$2:["delimiter","type.member"],"@default":""}}],[/\d*\.\d+/,"number.float"],[/\d+/,"number"],[/[()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":"delimiter"}}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"]],whitespace:[[/[ \t\r\n]+/,""],[/(\').*$/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"C?/,"string","@pop"]]}}}}]);
--------------------------------------------------------------------------------
/docs/docsify@4/uuid/esm-browser/stringify.js:
--------------------------------------------------------------------------------
1 | import validate from './validate.js';
2 | /**
3 | * Convert array of 16 byte values to UUID string format of the form:
4 | * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
5 | */
6 |
7 | const byteToHex = [];
8 |
9 | for (let i = 0; i < 256; ++i) {
10 | byteToHex.push((i + 0x100).toString(16).slice(1));
11 | }
12 |
13 | export function unsafeStringify(arr, offset = 0) {
14 | // Note: Be careful editing this code! It's been tuned for performance
15 | // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
16 | return (
17 | byteToHex[arr[offset + 0]] +
18 | byteToHex[arr[offset + 1]] +
19 | byteToHex[arr[offset + 2]] +
20 | byteToHex[arr[offset + 3]] +
21 | '-' +
22 | byteToHex[arr[offset + 4]] +
23 | byteToHex[arr[offset + 5]] +
24 | '-' +
25 | byteToHex[arr[offset + 6]] +
26 | byteToHex[arr[offset + 7]] +
27 | '-' +
28 | byteToHex[arr[offset + 8]] +
29 | byteToHex[arr[offset + 9]] +
30 | '-' +
31 | byteToHex[arr[offset + 10]] +
32 | byteToHex[arr[offset + 11]] +
33 | byteToHex[arr[offset + 12]] +
34 | byteToHex[arr[offset + 13]] +
35 | byteToHex[arr[offset + 14]] +
36 | byteToHex[arr[offset + 15]]
37 | ).toLowerCase();
38 | }
39 |
40 | function stringify(arr, offset = 0) {
41 | const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one
42 | // of the following:
43 | // - One or more input array values don't map to a hex octet (leading to
44 | // "undefined" in the uuid)
45 | // - Invalid input values for the RFC `version` or `variant` fields
46 |
47 | if (!validate(uuid)) {
48 | throw TypeError('Stringified UUID is invalid');
49 | }
50 |
51 | return uuid;
52 | }
53 |
54 | export default stringify;
55 |
--------------------------------------------------------------------------------
/vue_devtools/build/3553.js:
--------------------------------------------------------------------------------
1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[3553],{53553:(e,s,o)=>{o.r(s),o.d(s,{conf:()=>t,language:()=>n});var t={comments:{lineComment:"REM"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*(::\\s*|REM\\s+)#region"),end:new RegExp("^\\s*(::\\s*|REM\\s+)#endregion")}}},n={defaultToken:"",ignoreCase:!0,tokenPostfix:".bat",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:/call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/,symbols:/[=> {
20 | const mainWindow = getMainWindow({createIfNotFound: true});
21 | mainWindow.show();
22 | }
23 | },
24 | {
25 | label: '设置',
26 | click: () => {
27 | ipcMain.emit('toMain_settings', null, {type: 'show'});
28 | }
29 | },
30 | {
31 | label: '退出',
32 | click: () => {
33 | const mainWindow = getMainWindow({createIfNotFound: false});
34 | if (mainWindow && mainWindow.isDestroyed()) {
35 | // 1. 销毁主窗口
36 | mainWindow.destroy();
37 | }
38 | // 2. 退出应用
39 | app.quit();
40 | }
41 | }
42 | ];
43 |
44 | const contextMenu = Menu.buildFromTemplate(template);
45 | tray.setToolTip('This is my application.');
46 | tray.setContextMenu(contextMenu);
47 |
48 | const clickCallBack = () => {
49 | if (process.platform === 'darwin') {
50 | tray.popUpContextMenu();
51 | } else {
52 | const mainWindow = getMainWindow({createIfNotFound: true});
53 | mainWindow.show();
54 | }
55 | };
56 |
57 | if (process.platform === 'darwin') {
58 | tray.on('mouse-up', clickCallBack);
59 | } else {
60 | tray.on('click', clickCallBack);
61 | }
62 | return tray;
63 | }
64 |
--------------------------------------------------------------------------------
/vue_devtools/build/1585.js:
--------------------------------------------------------------------------------
1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[1585],{11585:(e,s,o)=>{o.r(s),o.d(s,{conf:()=>l,language:()=>n});var l={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},n={defaultToken:"",tokenPostfix:".dockerfile",variable:/\${?[\w]+}?/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},[/(ONBUILD)(\s+)/,["keyword",""]],[/(ENV)(\s+)([\w]+)/,["keyword","",{token:"variable",next:"@arguments"}]],[/(FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|ARG|VOLUME|LABEL|USER|WORKDIR|COPY|CMD|STOPSIGNAL|SHELL|HEALTHCHECK|ENTRYPOINT)/,{token:"keyword",next:"@arguments"}]],arguments:[{include:"@whitespace"},{include:"@strings"},[/(@variable)/,{cases:{"@eos":{token:"variable",next:"@popall"},"@default":"variable"}}],[/\\/,{cases:{"@eos":"","@default":""}}],[/./,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],whitespace:[[/\s+/,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],comment:[[/(^#.*$)/,"comment","@popall"]],strings:[[/\\'$/,"","@popall"],[/\\'/,""],[/'$/,"string","@popall"],[/'/,"string","@stringBody"],[/"$/,"string","@popall"],[/"/,"string","@dblStringBody"]],stringBody:[[/[^\\\$']/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/'$/,"string","@popall"],[/'/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]],dblStringBody:[[/[^\\\$"]/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/"$/,"string","@popall"],[/"/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]]}}}}]);
--------------------------------------------------------------------------------
/vue_devtools/build/3315.js:
--------------------------------------------------------------------------------
1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[3315],{3315:(e,o,n)=>{n.r(o),n.d(o,{conf:()=>s,language:()=>t});var s={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}]},t={defaultToken:"",tokenPostfix:".pascaligo",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["begin","block","case","const","else","end","fail","for","from","function","if","is","nil","of","remove","return","skip","then","type","var","while","with","option","None","transaction"],typeKeywords:["bool","int","list","map","nat","record","string","unit","address","map","mtz","xtz"],operators:["=",">","<","<=",">=","<>",":",":=","and","mod","or","+","-","*","/","@","&","^","%"],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\$[0-9a-fA-F]{1,16}/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'/,"string","@string"],[/'[^\\']'/,"string"],[/'/,"string.invalid"],[/\#\d+/,"string"]],comment:[[/[^\(\*]+/,"comment"],[/\*\)/,"comment","@pop"],[/\(\*/,"comment"]],string:[[/[^\\']+/,"string"],[/\\./,"string.escape.invalid"],[/'/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}}}]);
--------------------------------------------------------------------------------
/vue_devtools/build/6331.js:
--------------------------------------------------------------------------------
1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[6331],{36331:(e,o,t)=>{t.r(o),t.d(o,{conf:()=>n,language:()=>s});var n={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}]},s={defaultToken:"",tokenPostfix:".cameligo",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["abs","begin","Bytes","Crypto","Current","else","end","failwith","false","fun","if","in","let","let%entry","let%init","List","list","Map","map","match","match%nat","mod","not","operation","Operation","of","Set","set","sender","source","String","then","true","type","with"],typeKeywords:["int","unit","string","tz"],operators:["=",">","<","<=",">=","<>",":",":=","and","mod","or","+","-","*","/","@","&","^","%","->","<-"],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\$[0-9a-fA-F]{1,16}/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'/,"string","@string"],[/'[^\\']'/,"string"],[/'/,"string.invalid"],[/\#\d+/,"string"]],comment:[[/[^\(\*]+/,"comment"],[/\*\)/,"comment","@pop"],[/\(\*/,"comment"]],string:[[/[^\\']+/,"string"],[/\\./,"string.escape.invalid"],[/'/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}}}]);
--------------------------------------------------------------------------------
/vue_devtools/build/7135.js:
--------------------------------------------------------------------------------
1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[7135],{87135:(e,t,n)=>{n.r(t),n.d(t,{conf:()=>i,language:()=>a});var o=n(82526),i={comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["<",">"]],autoClosingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],surroundingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],onEnterRules:[{beforeText:new RegExp("<([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$","i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:o.Mj.IndentAction.IndentOutdent}},{beforeText:new RegExp("<(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$","i"),action:{indentAction:o.Mj.IndentAction.Indent}}]},a={defaultToken:"",tokenPostfix:".xml",ignoreCase:!0,qualifiedName:/(?:[\w\.\-]+:)?[\w\.\-]+/,tokenizer:{root:[[/[^<&]+/,""],{include:"@whitespace"},[/(<)(@qualifiedName)/,[{token:"delimiter"},{token:"tag",next:"@tag"}]],[/(<\/)(@qualifiedName)(\s*)(>)/,[{token:"delimiter"},{token:"tag"},"",{token:"delimiter"}]],[/(<\?)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/(<\!)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/<\!\[CDATA\[/,{token:"delimiter.cdata",next:"@cdata"}],[/&\w+;/,"string.escape"]],cdata:[[/[^\]]+/,""],[/\]\]>/,{token:"delimiter.cdata",next:"@pop"}],[/\]/,""]],tag:[[/[ \t\r\n]+/,""],[/(@qualifiedName)(\s*=\s*)("[^"]*"|'[^']*')/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">?\/]*|'[^'>?\/]*)(?=[\?\/]\>)/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">]*|'[^'>]*)/,["attribute.name","","attribute.value"]],[/@qualifiedName/,"attribute.name"],[/\?>/,{token:"delimiter",next:"@pop"}],[/(\/)(>)/,[{token:"tag"},{token:"delimiter",next:"@pop"}]],[/>/,{token:"delimiter",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[//,{token:"comment",next:"@pop"}],[//,"comment","@pop"],[//,"comment","@pop"],[/[^-]+/,"comment.content"],[/./,"comment.content"]],otherTag:[[/\/?>/,"delimiter","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}}}}]);
--------------------------------------------------------------------------------
/vue_devtools/build/4858.js:
--------------------------------------------------------------------------------
1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[4858],{64858:(e,t,n)=>{n.r(t),n.d(t,{conf:()=>r,language:()=>o});var r={wordPattern:/(#?-?\d*\.\d\w*%?)|((::|[@#.!:])?[\w-?]+%?)|::|[@#.!:]/g,comments:{blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},o={defaultToken:"",tokenPostfix:".css",ws:"[ \t\n\r\f]*",identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.bracket"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@selector"}],selector:[{include:"@comments"},{include:"@import"},{include:"@strings"},["[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",{token:"keyword",next:"@keyframedeclaration"}],["[@](page|content|font-face|-moz-document)",{token:"keyword"}],["[@](charset|namespace)",{token:"keyword",next:"@declarationbody"}],["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@selectorname"},["[\\*]","tag"],["[>\\+,]","delimiter"],["\\[",{token:"delimiter.bracket",next:"@selectorattribute"}],["{",{token:"delimiter.bracket",next:"@selectorbody"}]],selectorbody:[{include:"@comments"},["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))","attribute.name","@rulevalue"],["}",{token:"delimiter.bracket",next:"@pop"}]],selectorname:[["(\\.|#(?=[^{])|%|(@identifier)|:)+","tag"]],selectorattribute:[{include:"@term"},["]",{token:"delimiter.bracket",next:"@pop"}]],term:[{include:"@comments"},["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@functioninvocation"},{include:"@numbers"},{include:"@name"},{include:"@strings"},["([<>=\\+\\-\\*\\/\\^\\|\\~,])","delimiter"],[",","delimiter"]],rulevalue:[{include:"@comments"},{include:"@strings"},{include:"@term"},["!important","keyword"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],warndebug:[["[@](warn|debug)",{token:"keyword",next:"@declarationbody"}]],import:[["[@](import)",{token:"keyword",next:"@declarationbody"}]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],parenthizedterm:[{include:"@term"},["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],declarationbody:[{include:"@term"},[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[/[^*/]+/,"comment"],[/./,"comment"]],name:[["@identifier","attribute.value"]],numbers:[["-?(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],keyframedeclaration:[["@identifier","attribute.value"],["{",{token:"delimiter.bracket",switchTo:"@keyframebody"}]],keyframebody:[{include:"@term"},["{",{token:"delimiter.bracket",next:"@selectorbody"}],["}",{token:"delimiter.bracket",next:"@pop"}]],functioninvocation:[["@identifier\\(",{token:"attribute.value",next:"@functionarguments"}]],functionarguments:[["\\$@identifier@ws:","attribute.name"],["[,]","delimiter"],{include:"@term"},["\\)",{token:"attribute.value",next:"@pop"}]],strings:[['~?"',{token:"string",next:"@stringenddoublequote"}],["~?'",{token:"string",next:"@stringendquote"}]],stringenddoublequote:[["\\\\.","string"],['"',{token:"string",next:"@pop"}],[/[^\\"]+/,"string"],[".","string"]],stringendquote:[["\\\\.","string"],["'",{token:"string",next:"@pop"}],[/[^\\']+/,"string"],[".","string"]]}}}}]);
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | const {defineConfig} = require('@vue/cli-service');
2 | const useCrypto = require('./crypto.js');
3 | const path = require('path');
4 |
5 | useCrypto();
6 |
7 | const name = 'ELT';
8 |
9 | module.exports = defineConfig({
10 | pages: {
11 | index: {
12 | entry: 'src/renderer/index/main.js',
13 | template: 'public/index.html',
14 | filename: 'index.html'
15 | },
16 | settings: {
17 | entry: 'src/renderer/settings/main.js',
18 | template: 'public/settings.html',
19 | filename: 'settings.html'
20 | }
21 | },
22 | transpileDependencies: true,
23 | pluginOptions: {
24 | electronBuilder: {
25 | cache: false,
26 | builderOptions: {
27 | // electronDist: 'avr_electron_6.1.12',
28 | // afterSign: './avr_scripts/after-sign.js',
29 | appId: 'com.yourappid.www',
30 | icon:
31 | process.platform === 'win32'
32 | ? path.join(__dirname, 'public/icons/win/icon.ico')
33 | : path.join(__dirname, 'public/icons/mac/icon.icns'),
34 | productName: name,
35 | // eslint-disable-next-line no-template-curly-in-string
36 | artifactName: name.toLowerCase() + '-${os}-${arch}-${version}.${ext}',
37 | copyright: 'Copyright © 2023 李钟意 All rights reserved.',
38 | directories: {
39 | // output: "./dist_electron/${platform}/${arch}/"
40 | },
41 | extraResources: [],
42 | win: {
43 | icon: path.join(__dirname, 'public/icons/win/icon.ico'),
44 | // target:指定要打包的目标格式,这里使用了 msi 和 nsis 两个选项,分别代表 MSI 和 NSIS 格式的安装包。
45 | target: ['msi', 'nsis'],
46 | // verifyUpdateCodeSignature 布尔值,表示是否验证更新包的数字签名。
47 | // 在发布应用程序更新时,为了确保更新包的完整性和安全性,通常需要对更新包进行数字签名。
48 | // 这个选项可以控制是否在安装更新时验证数字签名。
49 | // 如果设置为 false,则不验证数字签名。
50 | verifyUpdateCodeSignature: false
51 | },
52 | msi: {
53 | createDesktopShortcut: true, // 布尔值,表示是否在桌面上创建快捷方式。
54 | createStartMenuShortcut: true, // 布尔值,表示是否在开始菜单中创建快捷方式。
55 | runAfterFinish: false, // 布尔值,表示是否在安装完成后自动运行程序。
56 | oneClick: true, // 布尔值,表示是否启用单击安装模式。在单击安装模式下,用户只需单击一次安装程序即可开始安装。
57 | perMachine: true, // 布尔值,表示安装程序是否将应用程序安装为机器级别(即所有用户共享)
58 | shortcutName: name // 字符串,表示快捷方式的名称。
59 | },
60 |
61 | // publish 指定应用程序的发布渠道和版本。
62 | // 这里使用了 generic 作为发布提供者,alpha 作为版本号,url 则是指定应用程序的发布地址。
63 | // 这些信息将用于自动化部署和更新应用程序。
64 | publish: [
65 | {
66 | provider: 'generic',
67 | channel: 'alpha',
68 | url: ''
69 | }
70 | ],
71 | // asarUnpack:指定 asar 模块的解压设置。
72 | // asar 是 Electron 用来打包应用程序的一种文件格式,这个选项可以用于指定应用程序中需要解压缩的文件或目录。
73 | // 这里使用了一个数组,其中包含两个字符串。第一个字符串指定了需要解压缩的所有 .node 文件,第二个字符串指定了需要解压缩的两个目录 sdk 和 public。
74 | asarUnpack: [],
75 | mac: {
76 | // https://github.com/electron-userland/electron-builder/issues/5689
77 | target: {
78 | target: 'default',
79 | // arch: ['universal']
80 | // arch: ['arm64']
81 | // arch: ['x64']
82 | arch: process.env.VUE_APP_PACK_ARCH
83 | },
84 | // mergeASARs: false, // https://github.com/isaacs/minimatch/issues/173
85 | category: name, // 指定应用程序所属的分类,通常用于在 macOS Dock 中显示应用程序的图标。
86 | hardenedRuntime: true, // 布尔值,表示是否启用强化的 macOS 运行时保护机制。
87 | extendInfo: {
88 | // 用于指定 macOS 应用程序的扩展信息。
89 | // 这里指定了两个键值对,分别表示应用程序需要访问麦克风和摄像头。
90 | // 这些信息将在应用程序启动时显示给用户,以获得用户的授权。
91 | NSMicrophoneUsageDescription: true, // 请允许本程序访问您的麦克风
92 | NSCameraUsageDescription: true // 请允许本程序访问您的摄像头
93 | }
94 | }
95 | },
96 | preload: {
97 | mainWindow: 'src/main/preload/index.js',
98 | settingsWindow: 'src/main/preload/settings.js'
99 | },
100 | chainWebpackMainProcess: (config) => {
101 | config.module.rule('babel').test(/\.js$/).use('babel-loader').loader('babel-loader').end();
102 | },
103 | nodeIntegration: false,
104 | externals: ['ffi-napi', 'ref-napi'],
105 | mainProcessFile: 'src/main/background.js',
106 | mainProcessWatch: ['src/main/**/*']
107 | }
108 | }
109 | });
110 |
--------------------------------------------------------------------------------
/vue_devtools/build/6175.js:
--------------------------------------------------------------------------------
1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[6175],{6175:(e,t,n)=>{n.r(t),n.d(t,{conf:()=>s,language:()=>o});var s={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\$\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},o={defaultToken:"",tokenPostfix:".cs",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["extern","alias","using","bool","decimal","sbyte","byte","short","ushort","int","uint","long","ulong","char","float","double","object","dynamic","string","assembly","is","as","ref","out","this","base","new","typeof","void","checked","unchecked","default","delegate","var","const","if","else","switch","case","while","do","for","foreach","in","break","continue","goto","return","throw","try","catch","finally","lock","yield","from","let","where","join","on","equals","into","orderby","ascending","descending","select","group","by","namespace","partial","class","field","event","method","param","public","protected","internal","private","abstract","sealed","static","struct","readonly","volatile","virtual","override","params","get","set","add","remove","operator","true","false","implicit","explicit","interface","enum","null","async","await","fixed","sizeof","stackalloc","unsafe","nameof","when"],namespaceFollows:["namespace","using"],parenFollows:["if","for","while","switch","foreach","using","catch","when"],operators:["=","??","||","&&","|","^","&","==","!=","<=",">=","<<","+","-","*","/","%","!","~","++","--","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=",">>","=>"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?[fFdD]?/,"number.float"],[/0[xX][0-9a-fA-F_]+/,"number.hex"],[/0[bB][01_]+/,"number.hex"],[/[0-9_]+/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",next:"@string"}],[/\$\@"/,{token:"string.quote",next:"@litinterpstring"}],[/\@"/,{token:"string.quote",next:"@litstring"}],[/\$"/,{token:"string.quote",next:"@interpolatedstring"}],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],qualified:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],[/\./,"delimiter"],["","","@pop"]],namespace:[{include:"@whitespace"},[/[A-Z]\w*/,"namespace"],[/[\.=]/,"delimiter"],["","","@pop"]],comment:[[/[^\/*]+/,"comment"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",next:"@pop"}]],litstring:[[/[^"]+/,"string"],[/""/,"string.escape"],[/"/,{token:"string.quote",next:"@pop"}]],litinterpstring:[[/[^"{]+/,"string"],[/""/,"string.escape"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.litinterpstring"}],[/"/,{token:"string.quote",next:"@pop"}]],interpolatedstring:[[/[^\\"{]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.interpolatedstring"}],[/"/,{token:"string.quote",next:"@pop"}]],whitespace:[[/^[ \t\v\f]*#((r)|(load))(?=\s)/,"directive.csx"],[/^[ \t\v\f]*#\w.*$/,"namespace.cpp"],[/[ \t\v\f\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}}}]);
--------------------------------------------------------------------------------