skypager-project-types-electron-app
Version:
skypager electron app project type
78 lines (57 loc) • 1.76 kB
JavaScript
module.exports = {
parseHash,
decorateWindow
}
function parseHash() {
window.__args__ = {};
if (window.location.hash) {
var hash = window
.location
.hash
.slice(1)
.replace('/', '')
try {
window.__args__ = Object.freeze(JSON.parse(decodeURIComponent(hash)))
} catch (error) {}
}
return window.__args__
}
function decorateWindow(context = {}) {
const __args__ = parseHash()
const {dialog, BrowserWindow} = require('electron').remote
const {ipcRenderer} = require('electron')
const IPCResponder = require('./responder')
const ipcStream = require('./stream')
const Positioner = require('./positioner')
const Runtime = require('skypager-project-types-electron-app/lib/runtime').default
const responder = new IPCResponder(ipcRenderer.send.bind(ipcRenderer), ipcRenderer.on.bind(ipcRenderer))
function getBrowserWindow(windowId = context.windowId) {
return BrowserWindow.fromId(windowId || __args__.windowId || 1)
}
return Object.assign(context, {
storage: require('./storage'),
BrowserWindow,
get positioner() {
return new Positioner(getBrowserWindow())
},
//streamCommandOutput,
electronDialog: dialog,
onPanelMessage(handler, channel = 'PANEL') {
return responder.registerTopic(channel, (payload) => Promise.resolve(handler(payload)))
},
resizeBrowserWindow(...args) {
return getBrowserWindow().setSize(...args)
},
moveBrowserWindow(...args) {
return context.positioner.move(...args)
},
ipcRenderer,
ipc: ipcRenderer,
responder,
parseHash,
createRuntime() {
return new Runtime(__args__, { getContext() { return context } })
},
ipcStream
})
}