You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							100 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
	
	
							100 lines
						
					
					
						
							2.4 KiB
						
					
					
				/** | 
						|
 * A Node.js wrapper for terminal-notify (with fallback). | 
						|
 */ | 
						|
var utils = require('../lib/utils'); | 
						|
var Growl = require('./growl'); | 
						|
var path = require('path'); | 
						|
var notifier = path.join( | 
						|
  __dirname, | 
						|
  '../vendor/mac.noindex/terminal-notifier.app/Contents/MacOS/terminal-notifier' | 
						|
); | 
						|
 | 
						|
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 = utils.clone(options || {}); | 
						|
  if (!(this instanceof NotificationCenter)) { | 
						|
    return new NotificationCenter(options); | 
						|
  } | 
						|
  this.options = options; | 
						|
 | 
						|
  EventEmitter.call(this); | 
						|
} | 
						|
util.inherits(NotificationCenter, EventEmitter); | 
						|
var activeId = null; | 
						|
 | 
						|
function noop() {} | 
						|
NotificationCenter.prototype.notify = function(options, callback) { | 
						|
  var fallbackNotifier; | 
						|
  var id = identificator(); | 
						|
  options = utils.clone(options || {}); | 
						|
  activeId = id; | 
						|
 | 
						|
  if (typeof options === 'string') { | 
						|
    options = { title: 'node-notifier', message: options }; | 
						|
  } | 
						|
  callback = callback || noop; | 
						|
 | 
						|
  if (typeof callback !== 'function') { | 
						|
    throw new TypeError( | 
						|
      'The second argument must be a function callback. You have passed ' + | 
						|
        typeof fn | 
						|
    ); | 
						|
  } | 
						|
 | 
						|
  var actionJackedCallback = utils.actionJackerDecorator( | 
						|
    this, | 
						|
    options, | 
						|
    callback, | 
						|
    function(data) { | 
						|
      if (activeId !== id) return false; | 
						|
 | 
						|
      if (data === 'activate') { | 
						|
        return 'click'; | 
						|
      } | 
						|
      if (data === 'timeout') { | 
						|
        return 'timeout'; | 
						|
      } | 
						|
      if (data === 'replied') { | 
						|
        return 'replied'; | 
						|
      } | 
						|
      return false; | 
						|
    } | 
						|
  ); | 
						|
 | 
						|
  options = utils.mapToMac(options); | 
						|
 | 
						|
  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.fileCommandJson( | 
						|
      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' }; | 
						|
}
 | 
						|
 |