2
2
mirror of https://github.com/Llewellynvdm/nativefier.git synced 2024-06-09 07:52:19 +00:00
nativefier/src/options/optionsMain.js
FabulousCupcake d0a0614ba3 Add --browserwindow-options to completely expose Electron options (PR #835)
This adds a new flag `--browserwindow-options`, taking a stringified JSON object as input.  
It will be inserted directly into the options when BrowserConfig is initialized.

This allows total configurability of the electron BrowserWindow configuration via nativefier.

An example use case is added to the documentation, which modifies the default font family in the browser.

#### References

- https://github.com/electron/electron/blob/master/docs/api/browser-window.md#new-browserwindowoptions
  - See the following for electron v3.1.7
  - https://github.com/electron/electron/blob/v3.1.7/docs/api/browser-window.md#new-browserwindowoptions
2019-08-22 21:37:49 +02:00

133 lines
4.3 KiB
JavaScript

import fs from 'fs';
import log from 'loglevel';
import inferOs from '../infer/inferOs';
import normalizeUrl from './normalizeUrl';
import packageJson from '../../package.json';
import { ELECTRON_VERSION, PLACEHOLDER_APP_DIR } from '../constants';
import asyncConfig from './asyncConfig';
const { inferPlatform, inferArch } = inferOs;
/**
* Extracts only desired keys from inpOptions and augments it with defaults
* @param {Object} inpOptions
* @returns {Promise}
*/
export default function(inpOptions) {
const options = {
dir: PLACEHOLDER_APP_DIR,
name: inpOptions.name,
targetUrl: normalizeUrl(inpOptions.targetUrl),
platform: inpOptions.platform || inferPlatform(),
arch: inpOptions.arch || inferArch(),
electronVersion: inpOptions.electronVersion || ELECTRON_VERSION,
nativefierVersion: packageJson.version,
out: inpOptions.out || process.cwd(),
overwrite: inpOptions.overwrite,
asar: inpOptions.conceal || false,
icon: inpOptions.icon,
counter: inpOptions.counter || false,
bounce: inpOptions.bounce || false,
width: inpOptions.width || 1280,
height: inpOptions.height || 800,
minWidth: inpOptions.minWidth,
minHeight: inpOptions.minHeight,
maxWidth: inpOptions.maxWidth,
maxHeight: inpOptions.maxHeight,
showMenuBar: inpOptions.showMenuBar || false,
fastQuit: inpOptions.fastQuit || false,
userAgent: inpOptions.userAgent,
ignoreCertificate: inpOptions.ignoreCertificate || false,
disableGpu: inpOptions.disableGpu || false,
ignoreGpuBlacklist: inpOptions.ignoreGpuBlacklist || false,
enableEs3Apis: inpOptions.enableEs3Apis || false,
insecure: inpOptions.insecure || false,
flashPluginDir: inpOptions.flashPath || inpOptions.flash || null,
diskCacheSize: inpOptions.diskCacheSize || null,
inject: inpOptions.inject || null,
ignore: 'src',
fullScreen: inpOptions.fullScreen || false,
maximize: inpOptions.maximize || false,
hideWindowFrame: inpOptions.hideWindowFrame,
verbose: inpOptions.verbose,
disableContextMenu: inpOptions.disableContextMenu,
disableDevTools: inpOptions.disableDevTools,
crashReporter: inpOptions.crashReporter,
// workaround for electron-packager#375
tmpdir: false,
zoom: inpOptions.zoom || 1.0,
internalUrls: inpOptions.internalUrls || null,
singleInstance: inpOptions.singleInstance || false,
clearCache: inpOptions.clearCache || false,
appVersion: inpOptions.appVersion,
buildVersion: inpOptions.buildVersion,
appCopyright: inpOptions.appCopyright,
versionString: inpOptions.versionString,
win32metadata: inpOptions.win32metadata || {
ProductName: inpOptions.name,
InternalName: inpOptions.name,
FileDescription: inpOptions.name,
},
processEnvs: inpOptions.processEnvs,
fileDownloadOptions: inpOptions.fileDownloadOptions,
tray: inpOptions.tray || false,
basicAuthUsername: inpOptions.basicAuthUsername || null,
basicAuthPassword: inpOptions.basicAuthPassword || null,
alwaysOnTop: inpOptions.alwaysOnTop || false,
titleBarStyle: inpOptions.titleBarStyle || null,
globalShortcuts: inpOptions.globalShortcuts || null,
browserwindowOptions: inpOptions.browserwindowOptions,
backgroundColor: inpOptions.backgroundColor || null,
darwinDarkModeSupport: inpOptions.darwinDarkModeSupport || false,
};
if (options.verbose) {
log.setLevel('trace');
} else {
log.setLevel('error');
}
if (options.flashPluginDir) {
options.insecure = true;
}
if (inpOptions.honest) {
options.userAgent = null;
}
if (options.platform.toLowerCase() === 'windows') {
options.platform = 'win32';
}
if (
options.platform.toLowerCase() === 'osx' ||
options.platform.toLowerCase() === 'mac'
) {
options.platform = 'darwin';
}
if (options.width > options.maxWidth) {
options.width = options.maxWidth;
}
if (options.height > options.maxHeight) {
options.height = options.maxHeight;
}
if (typeof inpOptions.x !== 'undefined') {
options.x = inpOptions.x;
}
if (typeof inpOptions.y !== 'undefined') {
options.y = inpOptions.y;
}
if (options.globalShortcuts) {
const globalShortcutsFileContent = fs.readFileSync(options.globalShortcuts);
options.globalShortcuts = JSON.parse(globalShortcutsFileContent);
}
return asyncConfig(options);
}