Electron desktop client added

This commit is contained in:
2018-03-09 16:48:30 -05:00
parent 9533abc20e
commit fc9075c33f
1817 changed files with 250193 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
const electron = require('electron');
const BrowserWindow = electron.BrowserWindow || electron.remote.BrowserWindow;
const ipcMain = electron.ipcMain || electron.remote.ipcMain;
const url = require('url');
const path = require('path');
function electronPrompt(options, parentWindow) {
return new Promise((resolve, reject) => {
const id = `${new Date().getTime()}-${Math.random()}`;
const opts = Object.assign({
title: 'Prompt',
label: 'Please input a value:',
alwaysOnTop: false,
value: null,
type: 'input',
selectOptions: null
}, options || {});
if(opts.type == 'select' && (opts.selectOptions === null || typeof(opts.selectOptions) !== 'object')) {
return reject(new Error('"selectOptions" must be an object'));
}
let promptWindow = new BrowserWindow({
width: 370, height: 130,
resizable: false,
parent: parentWindow ? (parentWindow instanceof BrowserWindow) : null,
skipTaskbar: true,
alwaysOnTop: opts.alwaysOnTop,
useContentSize: true,
modal: parentWindow ? true : false,
title : opts.title
});
promptWindow.setMenu(null);
const getOptionsListener = (event) => {
event.returnValue = JSON.stringify(opts);
};
const postDataListener = (event, value) => {
resolve(value);
event.returnValue = null;
cleanup();
};
const unresponsiveListener = () => {
reject(new Error('Window was unresponsive'));
cleanup();
};
const errorListener = (event, message) => {
reject(new Error(message));
event.returnValue = null;
cleanup();
};
const cleanup = () => {
if (promptWindow) {
promptWindow.close();
promptWindow = null;
}
};
ipcMain.on('prompt-get-options:' + id, getOptionsListener);
ipcMain.on('prompt-post-data:' + id, postDataListener);
ipcMain.on('prompt-error:' + id, errorListener);
promptWindow.on('unresponsive', unresponsiveListener);
promptWindow.on('closed', () => {
ipcMain.removeListener('prompt-get-options:' + id, getOptionsListener);
ipcMain.removeListener('prompt-post-data:' + id, postDataListener);
ipcMain.removeListener('prompt-error:' + id, postDataListener);
resolve(null);
});
const promptUrl = url.format({
protocol: 'file',
slashes: true,
pathname: path.join(__dirname, 'page', 'prompt.html'),
hash: id
});
promptWindow.loadURL(promptUrl);
});
}
module.exports = electronPrompt;