mirror of
https://github.com/owenlejeune/AirHockey.git
synced 2025-12-27 09:51:18 -05:00
Electron desktop client added
This commit is contained in:
88
Electron Client/node_modules/electron-prompt/lib/index.js
generated
vendored
Normal file
88
Electron Client/node_modules/electron-prompt/lib/index.js
generated
vendored
Normal 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;
|
||||
Reference in New Issue
Block a user