mirror of
				https://github.com/zulip/zulip-desktop.git
				synced 2025-10-31 03:53:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			145 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const {ipcRenderer} = require('electron');
 | |
| 
 | |
| const DomainUtil = require(__dirname + '/js/utils/domain-util.js');
 | |
| 
 | |
| class PreferenceView {
 | |
| 	constructor() {
 | |
| 		this.$newServerButton = document.getElementById('new-server-action');
 | |
| 		this.$saveServerButton = document.getElementById('save-server-action');
 | |
| 		this.$reloadServerButton = document.getElementById('reload-server-action');
 | |
| 		this.$serverInfoContainer = document.querySelector('.server-info-container');
 | |
| 	}
 | |
| 
 | |
| 	init() {
 | |
| 		this.initServers();
 | |
| 		this.initActions();
 | |
| 	}
 | |
| 
 | |
| 	initServers() {
 | |
| 		const servers = DomainUtil.getDomains();
 | |
| 		this.$serverInfoContainer.innerHTML = servers.length ? '' : 'Add your first server to get started!';
 | |
| 
 | |
| 		this.initNewServerForm();
 | |
| 
 | |
| 		for (const i in servers) {
 | |
| 			this.initServer(servers[i], i);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	initServer(server, index) {
 | |
| 		const {
 | |
| 			alias,
 | |
| 			url,
 | |
| 			icon
 | |
| 		} = server;
 | |
| 		const serverInfoTemplate = `
 | |
| 				<div class="server-info">
 | |
| 					<div class="server-info-left">
 | |
| 						<img class="server-info-icon" src="${icon}"/>
 | |
| 					</div>
 | |
| 					<div class="server-info-right">
 | |
| 						<div class="server-info-row">
 | |
| 							<span class="server-info-key">Name</span>
 | |
| 							<input class="server-info-value" disabled value="${alias}"/>
 | |
| 						</div>
 | |
| 						<div class="server-info-row">
 | |
| 							<span class="server-info-key">Url</span>
 | |
| 							<input class="server-info-value" disabled value="${url}"/>
 | |
| 						</div>
 | |
| 						<div class="server-info-row">
 | |
| 							<span class="server-info-key">Icon</span>
 | |
| 							<input class="server-info-value" disabled value="${icon}"/>
 | |
| 						</div>
 | |
| 						<div class="server-info-row">
 | |
| 							<span class="server-info-key">Actions</span>
 | |
| 							<div class="action server-info-value" id="delete-server-action-${index}">
 | |
| 								<i class="material-icons">indeterminate_check_box</i>
 | |
| 								<span>Delete</span>
 | |
| 							</div>
 | |
| 						</div>
 | |
| 					</div>
 | |
| 				</div>`;
 | |
| 		this.$serverInfoContainer.appendChild(this.insertNode(serverInfoTemplate));
 | |
| 		document.getElementById(`delete-server-action-${index}`).addEventListener('click', () => {
 | |
| 			DomainUtil.removeDomain(index);
 | |
| 			this.initServers();
 | |
| 			// alert('Success. Reload to apply changes.');
 | |
| 			ipcRenderer.send('reload-main');
 | |
| 			this.$reloadServerButton.classList.remove('hidden');
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	initNewServerForm() {
 | |
| 		const newServerFormTemplate = `
 | |
| 				<div class="server-info active hidden">
 | |
| 					<div class="server-info-left">
 | |
| 						<img class="server-info-icon" src="https://chat.zulip.org/static/images/logo/zulip-icon-128x128.271d0f6a0ca2.png"/>
 | |
| 					</div>
 | |
| 					<div class="server-info-right">
 | |
| 						<div class="server-info-row">
 | |
| 							<span class="server-info-key">Name</span>
 | |
| 							<input id="server-info-name" class="server-info-value" placeholder="(Required)"/>
 | |
| 						</div>
 | |
| 						<div class="server-info-row">
 | |
| 							<span class="server-info-key">Url</span>
 | |
| 							<input id="server-info-url" class="server-info-value" placeholder="(Required)"/>
 | |
| 						</div>
 | |
| 						<div class="server-info-row">
 | |
| 							<span class="server-info-key">Icon</span>
 | |
| 							<input id="server-info-icon" class="server-info-value" placeholder="(Optional)"/>
 | |
| 						</div>
 | |
| 					</div>
 | |
| 				</div>
 | |
| 		`;
 | |
| 		this.$serverInfoContainer.appendChild(this.insertNode(newServerFormTemplate));
 | |
| 
 | |
| 		this.$newServerForm = document.querySelector('.server-info.active');
 | |
| 		this.$newServerAlias = this.$newServerForm.querySelectorAll('input.server-info-value')[0];
 | |
| 		this.$newServerUrl = this.$newServerForm.querySelectorAll('input.server-info-value')[1];
 | |
| 		this.$newServerIcon = this.$newServerForm.querySelectorAll('input.server-info-value')[2];
 | |
| 	}
 | |
| 
 | |
| 	initActions() {
 | |
| 		this.$newServerButton.addEventListener('click', () => {
 | |
| 			this.$newServerForm.classList.remove('hidden');
 | |
| 			this.$saveServerButton.classList.remove('hidden');
 | |
| 			this.$newServerButton.classList.add('hidden');
 | |
| 		});
 | |
| 		this.$saveServerButton.addEventListener('click', () => {
 | |
| 			DomainUtil.checkDomain(this.$newServerUrl.value).then(domain => {
 | |
| 				const server = {
 | |
| 					alias: this.$newServerAlias.value,
 | |
| 					url: domain,
 | |
| 					icon: this.$newServerIcon.value
 | |
| 				};
 | |
| 				DomainUtil.addDomain(server);
 | |
| 				this.$saveServerButton.classList.add('hidden');
 | |
| 				this.$newServerButton.classList.remove('hidden');
 | |
| 				this.$newServerForm.classList.add('hidden');
 | |
| 
 | |
| 				this.initServers();
 | |
| 				// alert('Success. Reload to apply changes.');
 | |
| 				ipcRenderer.send('reload-main');
 | |
| 				this.$reloadServerButton.classList.remove('hidden');
 | |
| 			}, errorMessage => {
 | |
| 				alert(errorMessage);
 | |
| 			});
 | |
| 		});
 | |
| 		this.$reloadServerButton.addEventListener('click', () => {
 | |
| 			ipcRenderer.send('reload-main');
 | |
| 		});
 | |
| 	}
 | |
| 	insertNode(html) {
 | |
| 		const wrapper = document.createElement('div');
 | |
| 		wrapper.innerHTML = html;
 | |
| 		return wrapper.firstElementChild;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| window.onload = () => {
 | |
| 	const preferenceView = new PreferenceView();
 | |
| 	preferenceView.init();
 | |
| };
 |