diff --git a/.editorconfig b/.editorconfig index 7c227db..733bf4d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,6 +11,10 @@ insert_final_newline = true indent_style = space indent_size = 2 +[*.yml] +indent_style = space +indent_size = 2 + [*.md] indent_style = space indent_size = 4 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..62162a5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,14 @@ +name: CI + +on: [push, pull_request, workflow_dispatch] + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: {node-version: 16.x} + - run: npm install + - run: npm test diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index f06dffb..0000000 --- a/.travis.yml +++ /dev/null @@ -1,2 +0,0 @@ -language: node_js -node_js: '14' diff --git a/lib/index.js b/lib/index.js index 871b75f..46dd3d2 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,13 +1,42 @@ -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'); +const electron = require('electron'); const DEFAULT_WIDTH = 370; const DEFAULT_HEIGHT = 160; +function getElectronMainExport(id) { + if (electron[id]) { + return electron[id]; + } + + let remote = electron.remote; + if (!remote) { + try { + remote = require('@electron/remote'); + } catch (originalError) { + const error = new Error( + 'Install and set-up package `@electron/remote` to use this module from a renderer processs.\n' + + 'It is preferable to set up message exchanges for this using `ipcMain.handle()` and `ipcRenderer.invoke()`,\n' + + 'avoiding remote IPC overhead costs, and one morepackage dependancy.\n\n' + + 'Original error message:\n\n' + + originalError.message, + ); + + error.originalError = originalError; + throw error; + } + } + + if (remote && remote[id]) { + return remote[id]; + } + + throw new Error('Unknown electron export: ' + String(id)); +} + +const BrowserWindow = getElectronMainExport('BrowserWindow'); +const ipcMain = getElectronMainExport('ipcMain'); + function electronPrompt(options, parentWindow) { return new Promise((resolve, reject) => { const id = `${Date.now()}-${Math.random()}`; @@ -30,9 +59,9 @@ function electronPrompt(options, parentWindow) { useHtmlLabel: false, customStylesheet: null, menuBarVisible: false, - skipTaskbar: true + skipTaskbar: true, }, - options || {} + options || {}, ); if (options_.type === 'select' && (options_.selectOptions === null || typeof options_.selectOptions !== 'object')) { @@ -58,8 +87,8 @@ function electronPrompt(options, parentWindow) { icon: options_.icon || undefined, webPreferences: { nodeIntegration: true, - contextIsolation: false - } + contextIsolation: false, + }, }); promptWindow.setMenu(null); @@ -108,14 +137,10 @@ function electronPrompt(options, parentWindow) { resolve(null); }); - const promptUrl = url.format({ - protocol: 'file', - slashes: true, - pathname: path.join(__dirname, 'page', 'prompt.html'), - hash: id - }); - - promptWindow.loadURL(promptUrl); + promptWindow.loadFile( + path.join(__dirname, 'page', 'prompt.html'), + {hash: id}, + ); }); } diff --git a/lib/page/prompt.js b/lib/page/prompt.js index 7eefe30..486fb89 100644 --- a/lib/page/prompt.js +++ b/lib/page/prompt.js @@ -1,6 +1,5 @@ const fs = require('fs'); const {ipcRenderer} = require('electron'); -const docReady = require('doc-ready'); let promptId = null; let promptOptions = null; @@ -158,4 +157,4 @@ window.addEventListener('error', error => { } }); -docReady(promptRegister); +document.addEventListener('DOMContentLoaded', promptRegister); diff --git a/package.json b/package.json index ec39ee7..e5f3e0c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "electron-prompt", - "version": "1.6.2", + "version": "1.7.0", "description": "Electron helper to prompt for a value via input or select", "keywords": [ "electron", @@ -30,13 +30,11 @@ "browser" ], "rules": { - "unicorn/prefer-ternary": 0 + "unicorn/prefer-ternary": 0, + "unicorn/prefer-module": 0 } }, - "dependencies": { - "doc-ready": "^1.0.4" - }, "devDependencies": { - "xo": "^0.38.2" + "xo": "^0.44.0" } }