redmine-client/node_modules/node-notifier/notifiers/notificationcenter.js
2014-12-26 04:41:54 +01:00

77 lines
2.1 KiB
JavaScript

/**
* A Node.js wrapper for terminal-notify (with fallback).
*/
var path = require('path'),
notifier = path.join(__dirname, '../vendor/terminal-notifier.app/Contents/MacOS/terminal-notifier'),
utils = require('../lib/utils'),
Growl = require('./growl');
var EventEmitter = require('events').EventEmitter;
var util = require('util');
var errorMessageOsX = 'You need Mac OS X 10.8 or above to use NotificationCenter,' +
' or use Growl fallback with constructor option {withFallback: true}.';
module.exports = NotificationCenter;
function NotificationCenter (options) {
options = options || {};
if (!(this instanceof NotificationCenter)) {
return new NotificationCenter(options);
}
this.options = options;
EventEmitter.call(this);
}
util.inherits(NotificationCenter, EventEmitter);
var activeId = null;
NotificationCenter.prototype.notify = function (options, callback) {
var fallbackNotifier = null, id = identificator();
options = options || {};
activeId = id;
callback = callback || function () {};
var actionJackedCallback = utils.actionJackerDecorator(this, options, callback, function (data) {
if (activeId !== id) return false;
var cleaned = data.toLowerCase().trim();
if (cleaned === 'activate') {
return 'click';
}
if (cleaned === 'timeout') {
return 'timeout';
}
return false;
});
options = utils.mapToMac(options);
if (!!options.wait) {
options.wait = 'YES';
}
if (!options.message && !options.group && !options.list && !options.remove) {
callback(new Error('Message, group, remove or list property is required.'));
return this;
}
var argsList = utils.constructArgumentList(options);
if(utils.isMountainLion()) {
utils.command(this.options.customPath || notifier, argsList, actionJackedCallback);
return this;
}
if (fallbackNotifier || !!this.options.withFallback) {
fallbackNotifier = fallbackNotifier || new Growl(this.options);
return fallbackNotifier.notify(options, callback);
}
callback(new Error(errorMessageOsX));
return this;
};
function identificator () {
return { _ref: 'val' };
}