mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-10-24 00:23:36 +00:00
Only the initial value of a mutable field is exposed via exposeInMainWorld, which is why we have a bunch of setter and getter functions. It’s better to avoid the possibility for this confusion. Signed-off-by: Anders Kaseorg <anders@zulip.com>
76 lines
2.6 KiB
TypeScript
76 lines
2.6 KiB
TypeScript
import {contextBridge, ipcRenderer, webFrame} from 'electron';
|
|
import fs from 'fs';
|
|
|
|
import electron_bridge from './electron-bridge';
|
|
import * as NetworkError from './pages/network';
|
|
|
|
contextBridge.exposeInMainWorld('raw_electron_bridge', electron_bridge);
|
|
|
|
ipcRenderer.on('logout', () => {
|
|
// Create the menu for the below
|
|
const dropdown: HTMLElement = document.querySelector('.dropdown-toggle');
|
|
dropdown.click();
|
|
|
|
const nodes: NodeListOf<HTMLElement> = document.querySelectorAll('.dropdown-menu li:last-child a');
|
|
nodes[nodes.length - 1].click();
|
|
});
|
|
|
|
ipcRenderer.on('shortcut', () => {
|
|
// Create the menu for the below
|
|
const node: HTMLElement = document.querySelector('a[data-overlay-trigger=keyboard-shortcuts]');
|
|
// Additional check
|
|
if (node.textContent.trim().toLowerCase() === 'keyboard shortcuts (?)') {
|
|
node.click();
|
|
} else {
|
|
// Atleast click the dropdown
|
|
const dropdown: HTMLElement = document.querySelector('.dropdown-toggle');
|
|
dropdown.click();
|
|
}
|
|
});
|
|
|
|
ipcRenderer.on('show-notification-settings', () => {
|
|
// Create the menu for the below
|
|
const dropdown: HTMLElement = document.querySelector('.dropdown-toggle');
|
|
dropdown.click();
|
|
|
|
const nodes: NodeListOf<HTMLElement> = document.querySelectorAll('.dropdown-menu li a');
|
|
nodes[2].click();
|
|
|
|
const notificationItem: NodeListOf<HTMLElement> = document.querySelectorAll('.normal-settings-list li div');
|
|
|
|
// Wait until the notification dom element shows up
|
|
setTimeout(() => {
|
|
notificationItem[2].click();
|
|
}, 100);
|
|
});
|
|
|
|
window.addEventListener('load', (event: any): void => {
|
|
if (!event.target.URL.includes('app/renderer/network.html')) {
|
|
return;
|
|
}
|
|
|
|
const $reconnectButton = document.querySelector('#reconnect');
|
|
const $settingsButton = document.querySelector('#settings');
|
|
NetworkError.init($reconnectButton, $settingsButton);
|
|
});
|
|
|
|
// Electron's globalShortcut can cause unexpected results
|
|
// so adding the reload shortcut in the old-school way
|
|
// Zoom from numpad keys is not supported by electron, so adding it through listeners.
|
|
document.addEventListener('keydown', event => {
|
|
const cmdOrCtrl = event.ctrlKey || event.metaKey;
|
|
if (event.code === 'F5') {
|
|
ipcRenderer.send('forward-message', 'hard-reload');
|
|
} else if (cmdOrCtrl && (event.code === 'NumpadAdd' || event.code === 'Equal')) {
|
|
ipcRenderer.send('forward-message', 'zoomIn');
|
|
} else if (cmdOrCtrl && event.code === 'NumpadSubtract') {
|
|
ipcRenderer.send('forward-message', 'zoomOut');
|
|
} else if (cmdOrCtrl && event.code === 'Numpad0') {
|
|
ipcRenderer.send('forward-message', 'zoomActualSize');
|
|
}
|
|
});
|
|
|
|
(async () => webFrame.executeJavaScript(
|
|
fs.readFileSync(require.resolve('./injected'), 'utf8')
|
|
))();
|