orionsoft-react-scripts
Version:
Orionsoft Configuration and scripts for Create React App.
68 lines (54 loc) • 1.75 kB
JavaScript
/**
* Wrapper for the toaster (https://github.com/nels-o/toaster)
*/
var path = require('path'),
notifier = path.resolve(__dirname, '../vendor/toaster/toast.exe'),
utils = require('../lib/utils'),
Balloon = require('./balloon'),
cloneDeep = require('lodash.clonedeep');
var EventEmitter = require('events').EventEmitter;
var util = require('util');
var fallback = void 0;
module.exports = WindowsToaster;
function WindowsToaster (options) {
options = cloneDeep(options || {});
if (!(this instanceof WindowsToaster)) {
return new WindowsToaster(options);
}
this.options = options;
EventEmitter.call(this);
}
util.inherits(WindowsToaster, EventEmitter);
WindowsToaster.prototype.notify = function (options, callback) {
options = cloneDeep(options || {});
callback = callback || function () {};
if (typeof options === 'string') options = {
title: 'node-notifier',
message: options
};
var actionJackedCallback = utils.actionJackerDecorator(this, options, callback, function (data) {
if (data === 'activate') {
return 'click';
}
if (data === 'timeout') {
return 'timeout';
}
return false;
});
options.title = options.title || 'Node Notification:';
if (!options.message) {
callback(new Error('Message is required.'));
return this;
}
if (!utils.isWin8() && !!this.options.withFallback) {
fallback = fallback || new Balloon(this.options);
return fallback.notify(options, callback);
}
options = utils.mapToWin8(options);
var argsList = utils.constructArgumentList(options, {
wrapper: '',
noEscape: true
});
utils.fileCommand(this.options.customPath || notifier, argsList, actionJackedCallback);
return this;
};