2019-11-11 06:53:39 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const electron = require('electron');
|
2020-01-22 08:21:11 +00:00
|
|
|
const ipcRenderer = electron.ipcRenderer;
|
2019-11-11 06:53:39 +00:00
|
|
|
const winId = electron.remote.getCurrentWindow().id;
|
|
|
|
|
|
|
|
function setStyle(config) {
|
|
|
|
// Style it
|
|
|
|
let notiDoc = global.window.document;
|
|
|
|
let container = notiDoc.getElementById('container');
|
|
|
|
let appIcon = notiDoc.getElementById('appIcon');
|
|
|
|
let image = notiDoc.getElementById('image');
|
|
|
|
let close = notiDoc.getElementById('close');
|
|
|
|
let message = notiDoc.getElementById('message');
|
|
|
|
// Default style
|
|
|
|
setStyleOnDomElement(config.defaultStyleContainer, container);
|
|
|
|
// Size and radius
|
|
|
|
let style = {
|
|
|
|
height:
|
|
|
|
config.height -
|
|
|
|
2 * config.borderRadius -
|
|
|
|
2 * config.defaultStyleContainer.padding,
|
|
|
|
width:
|
|
|
|
config.width -
|
|
|
|
2 * config.borderRadius -
|
|
|
|
2 * config.defaultStyleContainer.padding,
|
|
|
|
borderRadius: config.borderRadius + 'px'
|
|
|
|
};
|
|
|
|
setStyleOnDomElement(style, container);
|
|
|
|
// Style appIcon or hide
|
|
|
|
if (config.appIcon) {
|
|
|
|
setStyleOnDomElement(config.defaultStyleAppIcon, appIcon);
|
|
|
|
appIcon.src = config.appIcon;
|
|
|
|
} else {
|
|
|
|
setStyleOnDomElement(
|
|
|
|
{
|
|
|
|
display: 'none'
|
|
|
|
},
|
|
|
|
appIcon
|
|
|
|
);
|
|
|
|
}
|
|
|
|
// Style image
|
|
|
|
setStyleOnDomElement(config.defaultStyleImage, image);
|
|
|
|
// Style close button
|
|
|
|
setStyleOnDomElement(config.defaultStyleClose, close);
|
|
|
|
// Remove margin from text p
|
|
|
|
setStyleOnDomElement(config.defaultStyleText, message);
|
|
|
|
}
|
|
|
|
|
|
|
|
function setContents(event, notificationObj) {
|
|
|
|
// sound
|
|
|
|
if (notificationObj.sound) {
|
|
|
|
// Check if file is accessible
|
|
|
|
try {
|
|
|
|
// If it's a local file, check it's existence
|
|
|
|
// Won't check remote files e.g. http://
|
|
|
|
if (
|
|
|
|
notificationObj.sound.match(/^file\:/) !== null ||
|
|
|
|
notificationObj.sound.match(/^\//) !== null
|
|
|
|
) {
|
|
|
|
let audio = new global.window.Audio(notificationObj.sound);
|
|
|
|
audio.play();
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
log(
|
|
|
|
'electron-notify: ERROR could not find sound file: ' +
|
|
|
|
notificationObj.sound.replace('file://', ''),
|
|
|
|
e,
|
|
|
|
e.stack
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let notiDoc = global.window.document;
|
|
|
|
// Title
|
|
|
|
let titleDoc = notiDoc.getElementById('title');
|
|
|
|
titleDoc.innerHTML = notificationObj.title || '';
|
|
|
|
// message
|
|
|
|
let messageDoc = notiDoc.getElementById('message');
|
|
|
|
messageDoc.innerHTML = notificationObj.text || '';
|
|
|
|
// Image
|
|
|
|
let imageDoc = notiDoc.getElementById('image');
|
|
|
|
if (notificationObj.image) {
|
|
|
|
imageDoc.src = notificationObj.image;
|
|
|
|
} else {
|
|
|
|
setStyleOnDomElement({ display: 'none' }, imageDoc);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Close button
|
|
|
|
let closeButton = notiDoc.getElementById('close');
|
|
|
|
closeButton.addEventListener('click', function(event) {
|
|
|
|
event.stopPropagation();
|
2020-01-22 08:21:11 +00:00
|
|
|
ipcRenderer.send(
|
|
|
|
'UCAP::ElectronNotification::close',
|
|
|
|
winId,
|
|
|
|
notificationObj
|
|
|
|
);
|
2019-11-11 06:53:39 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
// URL
|
|
|
|
let container = notiDoc.getElementById('container');
|
|
|
|
container.addEventListener('click', function() {
|
2020-01-22 08:21:11 +00:00
|
|
|
ipcRenderer.send(
|
|
|
|
'UCAP::ElectronNotification::click',
|
|
|
|
winId,
|
|
|
|
notificationObj
|
|
|
|
);
|
2019-11-11 06:53:39 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function setStyleOnDomElement(styleObj, domElement) {
|
|
|
|
try {
|
|
|
|
for (let styleAttr in styleObj) {
|
|
|
|
domElement.style[styleAttr] = styleObj[styleAttr];
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
throw new Error(
|
|
|
|
'electron-notify: Could not set style on domElement',
|
|
|
|
styleObj,
|
|
|
|
domElement
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function loadConfig(event, conf) {
|
|
|
|
setStyle(conf || {});
|
|
|
|
}
|
|
|
|
|
|
|
|
function reset() {
|
|
|
|
let notiDoc = global.window.document;
|
|
|
|
let container = notiDoc.getElementById('container');
|
|
|
|
let closeButton = notiDoc.getElementById('close');
|
|
|
|
|
|
|
|
// Remove event listener
|
|
|
|
let newContainer = container.cloneNode(true);
|
|
|
|
container.parentNode.replaceChild(newContainer, container);
|
|
|
|
let newCloseButton = closeButton.cloneNode(true);
|
|
|
|
closeButton.parentNode.replaceChild(newCloseButton, closeButton);
|
|
|
|
}
|
|
|
|
|
2020-01-22 08:21:11 +00:00
|
|
|
ipcRenderer.on(
|
|
|
|
'UCAP::ElectronNotification::BrowserWindowSetContents',
|
|
|
|
setContents
|
|
|
|
);
|
|
|
|
ipcRenderer.on('UCAP::ElectronNotification::loadConfig', loadConfig);
|
|
|
|
ipcRenderer.on('UCAP::ElectronNotification::reset', reset);
|
2019-11-11 06:53:39 +00:00
|
|
|
|
|
|
|
function log() {
|
|
|
|
console.log.apply(console, arguments);
|
|
|
|
}
|
|
|
|
|
|
|
|
delete global.require;
|
|
|
|
delete global.exports;
|
|
|
|
delete global.module;
|