import {ipcRenderer} from 'electron'; import {htmlEscape} from 'escape-goat'; import * as ConfigUtil from '../../utils/config-util'; import * as t from '../../utils/translation-util'; import BaseSection from './base-section'; interface NetworkSectionProps { $root: Element; } export default class NetworkSection extends BaseSection { props: NetworkSectionProps; $proxyPAC: HTMLInputElement; $proxyRules: HTMLInputElement; $proxyBypass: HTMLInputElement; $proxySaveAction: Element; $manualProxyBlock: Element; constructor(props: NetworkSectionProps) { super(); this.props = props; } templateHTML(): string { return htmlEscape`
${t.__('Proxy')}
${t.__('Use system proxy settings (requires restart)')}
${t.__('Manual proxy configuration')}
PAC ${t.__('script')}
${t.__('Proxy rules')}
${t.__('Proxy bypass rules')}
${t.__('Save')}
`; } init(): void { this.props.$root.innerHTML = this.templateHTML(); this.$proxyPAC = document.querySelector('#proxy-pac-option .setting-input-value'); this.$proxyRules = document.querySelector('#proxy-rules-option .setting-input-value'); this.$proxyBypass = document.querySelector('#proxy-bypass-option .setting-input-value'); this.$proxySaveAction = document.querySelector('#proxy-save-action'); this.$manualProxyBlock = this.props.$root.querySelector('.manual-proxy-block'); this.initProxyOption(); this.$proxyPAC.value = ConfigUtil.getConfigItem('proxyPAC', ''); this.$proxyRules.value = ConfigUtil.getConfigItem('proxyRules', ''); this.$proxyBypass.value = ConfigUtil.getConfigItem('proxyBypass', ''); this.$proxySaveAction.addEventListener('click', () => { ConfigUtil.setConfigItem('proxyPAC', this.$proxyPAC.value); ConfigUtil.setConfigItem('proxyRules', this.$proxyRules.value); ConfigUtil.setConfigItem('proxyBypass', this.$proxyBypass.value); ipcRenderer.send('forward-message', 'reload-proxy', true); }); } initProxyOption(): void { const manualProxyEnabled = ConfigUtil.getConfigItem('useManualProxy', false); this.toggleManualProxySettings(manualProxyEnabled); this.updateProxyOption(); } toggleManualProxySettings(option: boolean): void { if (option) { this.$manualProxyBlock.classList.remove('hidden'); } else { this.$manualProxyBlock.classList.add('hidden'); } } updateProxyOption(): void { this.generateSettingOption({ $element: document.querySelector('#use-system-settings .setting-control'), value: ConfigUtil.getConfigItem('useSystemProxy', false), clickHandler: () => { const newValue = !ConfigUtil.getConfigItem('useSystemProxy'); const manualProxyValue = ConfigUtil.getConfigItem('useManualProxy'); if (manualProxyValue && newValue) { ConfigUtil.setConfigItem('useManualProxy', !manualProxyValue); this.toggleManualProxySettings(!manualProxyValue); } if (!newValue) { // Remove proxy system proxy settings ConfigUtil.setConfigItem('proxyRules', ''); ipcRenderer.send('forward-message', 'reload-proxy', false); } ConfigUtil.setConfigItem('useSystemProxy', newValue); this.updateProxyOption(); } }); this.generateSettingOption({ $element: document.querySelector('#use-manual-settings .setting-control'), value: ConfigUtil.getConfigItem('useManualProxy', false), clickHandler: () => { const newValue = !ConfigUtil.getConfigItem('useManualProxy'); const systemProxyValue = ConfigUtil.getConfigItem('useSystemProxy'); this.toggleManualProxySettings(newValue); if (systemProxyValue && newValue) { ConfigUtil.setConfigItem('useSystemProxy', !systemProxyValue); } ConfigUtil.setConfigItem('proxyRules', ''); ConfigUtil.setConfigItem('useManualProxy', newValue); // Reload app only when turning manual proxy off, hence !newValue ipcRenderer.send('forward-message', 'reload-proxy', !newValue); this.updateProxyOption(); } }); } }