-
-
Notifications
You must be signed in to change notification settings - Fork 49
/
Copy pathindex.js
137 lines (115 loc) · 3.53 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import process from 'node:process';
import {app, BrowserWindow} from 'electron';
import localShortcut from 'electron-localshortcut';
import isDev from 'electron-is-dev';
const isMacOS = process.platform === 'darwin';
// A Map allows each window to have its own options
const developmentToolsOptions = new Map();
function toggleDevelopmentTools(win = BrowserWindow.getFocusedWindow()) {
if (win) {
const {webContents} = win;
if (webContents.isDevToolsOpened()) {
webContents.closeDevTools();
} else {
webContents.openDevTools(developmentToolsOptions.get(win));
}
}
}
function shouldRun(options) {
return options && (options.isEnabled === true || (options.isEnabled === null && isDev));
}
function getOptionsForWindow(win, options) {
if (!options.windowSelector) {
return options;
}
const newOptions = options.windowSelector(win);
return newOptions === true
? options
: (newOptions === false
? {isEnabled: false}
: {...options, ...newOptions});
}
async function registerAccelerators(win = BrowserWindow.getFocusedWindow()) {
await app.whenReady();
if (win) {
localShortcut.register(win, 'CommandOrControl+Shift+C', inspectElements);
localShortcut.register(win, isMacOS ? 'Command+Alt+I' : 'Control+Shift+I', devTools);
localShortcut.register(win, 'F12', devTools);
localShortcut.register(win, 'CommandOrControl+R', refresh);
localShortcut.register(win, 'F5', refresh);
} else {
localShortcut.register('CommandOrControl+Shift+C', inspectElements);
localShortcut.register(isMacOS ? 'Command+Alt+I' : 'Control+Shift+I', devTools);
localShortcut.register('F12', devTools);
localShortcut.register('CommandOrControl+R', refresh);
localShortcut.register('F5', refresh);
}
}
// eslint-disable-next-line unicorn/prevent-abbreviations
export function devTools(win = BrowserWindow.getFocusedWindow()) {
if (win) {
toggleDevelopmentTools(win);
}
}
// eslint-disable-next-line unicorn/prevent-abbreviations
export function openDevTools(win = BrowserWindow.getFocusedWindow()) {
if (win) {
win.webContents.openDevTools(developmentToolsOptions.get(win));
}
}
export function refresh(win = BrowserWindow.getFocusedWindow()) {
if (win) {
win.webContents.reloadIgnoringCache();
}
}
function inspectElements() {
const win = BrowserWindow.getFocusedWindow();
const inspect = () => {
win.devToolsWebContents.executeJavaScript('DevToolsAPI.enterInspectElementMode()');
};
if (win) {
if (win.webContents.isDevToolsOpened()) {
inspect();
} else {
win.webContents.once('devtools-opened', inspect);
win.openDevTools();
}
}
}
export default function debug(options) {
options = {
isEnabled: null,
showDevTools: true,
devToolsMode: 'previous',
...options,
};
if (!options.windowSelector) {
if (!shouldRun(options)) {
return;
}
// When there's no filter, accelerators are defined globally
registerAccelerators();
}
app.on('browser-window-created', (event, win) => {
/// Workaround for https://github.com/electron/electron/issues/12438
win.webContents.once('dom-ready', () => {
const winOptions = getOptionsForWindow(win, options);
if (winOptions.devToolsMode !== 'previous') {
developmentToolsOptions.set(win, {
...developmentToolsOptions.get(win),
mode: winOptions.devToolsMode,
});
}
if (!shouldRun(winOptions)) {
return;
}
if (winOptions.windowSelector) {
// With filters, accelerators are defined for each window depending on their provided options
registerAccelerators(win);
}
if (winOptions.showDevTools) {
openDevTools(win);
}
});
});
}