123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- const fs = require('fs');
- const {ipcRenderer} = require('electron');
- let promptId = null;
- let promptOptions = null;
- function promptError(error) {
- if (error instanceof Error) {
- error = error.message;
- }
- ipcRenderer.sendSync('prompt-error:' + promptId, error);
- }
- function promptCancel() {
- ipcRenderer.sendSync('prompt-post-data:' + promptId, null);
- }
- function promptSubmit() {
- const dataElement = document.querySelector('#data');
- let data = null;
- if (promptOptions.type === 'input') {
- data = dataElement.value;
- } else if (promptOptions.type === 'select') {
- if (promptOptions.selectMultiple) {
- data = dataElement.querySelectorAll('option[selected]').map(o => o.getAttribute('value'));
- } else {
- data = dataElement.value;
- }
- }
- ipcRenderer.sendSync('prompt-post-data:' + promptId, data);
- }
- function promptCreateInput() {
- const dataElement = document.createElement('input');
- dataElement.setAttribute('type', 'text');
- if (promptOptions.value) {
- dataElement.value = promptOptions.value;
- } else {
- dataElement.value = '';
- }
- if (promptOptions.inputAttrs && typeof (promptOptions.inputAttrs) === 'object') {
- for (const k in promptOptions.inputAttrs) {
- if (!Object.prototype.hasOwnProperty.call(promptOptions.inputAttrs, k)) {
- continue;
- }
- dataElement.setAttribute(k, promptOptions.inputAttrs[k]);
- }
- }
- dataElement.addEventListener('keyup', event => {
- if (event.key === 'Escape') {
- promptCancel();
- }
- });
- dataElement.addEventListener('keypress', event => {
- if (event.key === 'Enter') {
- event.preventDefault();
- document.querySelector('#ok').click();
- }
- });
- return dataElement;
- }
- function promptCreateSelect() {
- const dataElement = document.createElement('select');
- let optionElement;
- for (const k in promptOptions.selectOptions) {
- if (!Object.prototype.hasOwnProperty.call(promptOptions.selectOptions, k)) {
- continue;
- }
- optionElement = document.createElement('option');
- optionElement.setAttribute('value', k);
- optionElement.textContent = promptOptions.selectOptions[k];
- if (k === promptOptions.value) {
- optionElement.setAttribute('selected', 'selected');
- }
- dataElement.append(optionElement);
- }
- return dataElement;
- }
- function promptRegister() {
- promptId = document.location.hash.replace('#', '');
- try {
- promptOptions = JSON.parse(ipcRenderer.sendSync('prompt-get-options:' + promptId));
- } catch (error) {
- return promptError(error);
- }
- if (promptOptions.useHtmlLabel) {
- document.querySelector('#label').innerHTML = promptOptions.label;
- } else {
- document.querySelector('#label').textContent = promptOptions.label;
- }
- if (promptOptions.buttonLabels && promptOptions.buttonLabels.ok) {
- document.querySelector('#ok').textContent = promptOptions.buttonLabels.ok;
- }
- if (promptOptions.buttonLabels && promptOptions.buttonLabels.cancel) {
- document.querySelector('#cancel').textContent = promptOptions.buttonLabels.cancel;
- }
- try {
- if (promptOptions.customStylesheet) {
- const customStyleContent = fs.readFileSync(promptOptions.customStylesheet);
- if (customStyleContent) {
- const customStyle = document.createElement('style');
- customStyle.setAttribute('rel', 'stylesheet');
- customStyle.append(document.createTextNode(customStyleContent));
- document.head.append(customStyle);
- }
- }
- } catch (error) {
- return promptError(error);
- }
- document.querySelector('#form').addEventListener('submit', promptSubmit);
- document.querySelector('#cancel').addEventListener('click', promptCancel);
- const dataContainerElement = document.querySelector('#data-container');
- let dataElement;
- if (promptOptions.type === 'input') {
- dataElement = promptCreateInput();
- } else if (promptOptions.type === 'select') {
- dataElement = promptCreateSelect();
- } else {
- return promptError(`Unhandled input type '${promptOptions.type}'`);
- }
- dataContainerElement.append(dataElement);
- dataElement.setAttribute('id', 'data');
- dataElement.focus();
- if (promptOptions.type === 'input') {
- dataElement.select();
- }
- }
- window.addEventListener('error', error => {
- if (promptId) {
- promptError('An error has occured on the prompt window: \n' + error);
- }
- });
- document.addEventListener('DOMContentLoaded', promptRegister);
|