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.
54 lines
1.7 KiB
54 lines
1.7 KiB
var Emitter = require('./Emitter'); |
|
var root = require('./root'); |
|
var each = require('./each'); |
|
var Notification = root.Notification; |
|
exports = function(title, options) { |
|
var notification = new exports.Notification(title, options); |
|
notification.show(); |
|
}; |
|
exports.Notification = Emitter.extend({ |
|
initialize: function Notification(title) { |
|
var options = |
|
arguments.length > 1 && arguments[1] !== undefined |
|
? arguments[1] |
|
: {}; |
|
this._options = options; |
|
this._title = title; |
|
this.callSuper(Emitter, 'initialize', arguments); |
|
}, |
|
handleEvent: function(e) { |
|
this.emit(e.type, e); |
|
}, |
|
show: function() { |
|
var _this = this; |
|
if (!Notification) { |
|
return this.emit('error', Error('Notification is not supported')); |
|
} |
|
if (Notification.permission === 'granted') { |
|
this._show(); |
|
} else { |
|
Notification.requestPermission(function(permission) { |
|
switch (permission) { |
|
case 'granted': |
|
_this._show(); |
|
break; |
|
case 'denied': |
|
_this.emit( |
|
'error', |
|
Error('Notification permission is denied') |
|
); |
|
break; |
|
} |
|
}); |
|
} |
|
}, |
|
_show: function() { |
|
var _this2 = this; |
|
var notification = new Notification(this._title, this._options); |
|
each(['show', 'close', 'click'], function(type) { |
|
notification.addEventListener(type, _this2, false); |
|
}); |
|
} |
|
}); |
|
|
|
module.exports = exports;
|
|
|