@launchmenu/core
Version:
An environment for visual keyboard controlled applets
106 lines • 7.9 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.WindowController = void 0;
const electron_1 = require("electron");
const path_1 = __importDefault(require("path"));
const standardWindowSize_1 = require("./standardWindowSize");
class WindowController {
/**
* Creates a new window manager
* @param config The configuration for the application
*/
constructor(config) {
this.config = config;
// Create the browser window
this.window = new electron_1.BrowserWindow({
...standardWindowSize_1.standardWindowSize,
frame: false,
transparent: true,
resizable: false,
show: false,
webPreferences: {
enableRemoteModule: true,
nodeIntegration: true,
contextIsolation: false,
backgroundThrottling: false,
nativeWindowOpen: true,
},
});
this.window.menuBarVisible = false;
// Load the index.html of the app
const indexPath = path_1.default.join(__dirname, "index.html");
this.window.loadFile(indexPath);
// Handle links
const webview = this.window.webContents;
function openLink(url) {
electron_1.shell.openExternal(url).catch(e => console.error(e));
}
webview.on("new-window", (event, url) => {
event.preventDefault();
openLink(url);
});
webview.on("will-navigate", (e, url) => {
webview.stop();
openLink(url);
});
// TODO: I forgot to document why I added this... Look into this again and add relevant comment
webview.session.webRequest.onHeadersReceived({ urls: ["*://*/*"] }, (d, c) => {
if (d.responseHeaders["X-Frame-Options"]) {
delete d.responseHeaders["X-Frame-Options"];
}
else if (d.responseHeaders["x-frame-options"]) {
delete d.responseHeaders["x-frame-options"];
}
c({ cancel: false, responseHeaders: d.responseHeaders });
});
// Track whether the window has been started and shown. To be used by the installer
this.shown = new Promise(res => {
this.window.once("show", () => res());
});
this.started = new Promise(res => {
electron_1.ipcMain.once("LM-started", () => res());
});
// Check if window is closed by user
this.window.on("close", () => {
electron_1.ipcMain.emit("shutdown");
});
// Initialize the window's config
this.initWindowConfig();
}
/**
* Shares the configuration data with the window
*/
initWindowConfig() {
electron_1.ipcMain.once("LM-requestConfig", () => {
this.window.webContents.send("LM-sendConfig", this.config);
});
}
/**
* Shows the LM window
*/
show() {
this.window.show();
}
/**
* Destroy the window manager and the window(s) it is managing
*/
async destroy() {
// Listen for the window to finish disposing
const disposePromise = new Promise(res => {
this.window.webContents.on("ipc-message", (event, message) => {
if (message == "LM-disposed")
return res();
});
setTimeout(res, 10000);
});
// Send a command to the window to dispose everything
this.window.webContents.send("LM-dispose");
await disposePromise;
this.window.destroy();
}
}
exports.WindowController = WindowController;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2luZG93Q29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aW5kb3dDb250cm9sbGVyL1dpbmRvd0NvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsdUNBQXVEO0FBQ3ZELGdEQUF3QjtBQUN4Qiw2REFBd0Q7QUFHeEQsTUFBYSxnQkFBZ0I7SUFVekI7OztPQUdHO0lBQ0gsWUFBbUIsTUFBMEI7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSx3QkFBYSxDQUFDO1lBQzVCLEdBQUcsdUNBQWtCO1lBQ3JCLEtBQUssRUFBRSxLQUFLO1lBQ1osV0FBVyxFQUFFLElBQUk7WUFDakIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsSUFBSSxFQUFFLEtBQUs7WUFDWCxjQUFjLEVBQUU7Z0JBQ1osa0JBQWtCLEVBQUUsSUFBSTtnQkFDeEIsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLG9CQUFvQixFQUFFLEtBQUs7Z0JBQzNCLGdCQUFnQixFQUFFLElBQUk7YUFDekI7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFbkMsaUNBQWlDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWhDLGVBQWU7UUFDZixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN4QyxTQUFTLFFBQVEsQ0FBQyxHQUFXO1lBQ3pCLGdCQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENB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
;