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.
186 lines
4.0 KiB
186 lines
4.0 KiB
5 years ago
|
(function(window){
|
||
|
/**
|
||
|
* @brief Notifier
|
||
|
*
|
||
|
* @param type 1. 一直提示 2,更新提示内容 3, 控制显示上限。超过个数删除最早的 4,超时更新
|
||
|
* @param param 本参数在type为3,4时才有效, type为3表示可以最多显示通知的个数 4, 表示多少秒后删除了
|
||
|
*
|
||
|
* @return
|
||
|
*/
|
||
|
function Notifier() {};
|
||
|
|
||
|
|
||
|
window.Notifier = Notifier;
|
||
|
|
||
|
|
||
|
type = 1;
|
||
|
queue = [];
|
||
|
t = 5;
|
||
|
c = 3;
|
||
|
_notifier = undefined ;
|
||
|
|
||
|
if(undefined !== window.webkitNotifications) {
|
||
|
_notifier = window.webkitNotifications;
|
||
|
|
||
|
}else if (undefined !== window.Notification) {
|
||
|
_notifier = window.Notification;
|
||
|
} else {
|
||
|
// console.log('error not found notification!')
|
||
|
}
|
||
|
|
||
|
window.Notifier.ModelAll = function() {
|
||
|
type = 1;
|
||
|
}
|
||
|
|
||
|
window.Notifier.ModelUpdate = function() {
|
||
|
type = 2;
|
||
|
}
|
||
|
|
||
|
window.Notifier.ModelCount = function(ct) {
|
||
|
if(ct !== undefined) c = ct;
|
||
|
type = 3;
|
||
|
}
|
||
|
|
||
|
window.Notifier.ModelTimeout = function(timeout) {
|
||
|
if(timeout !== undefined) t = timeout;
|
||
|
type = 4;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
window.Notifier.HasSupport = function() {
|
||
|
if(undefined === _notifier) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
window.Notifier.GetPermission = function() {
|
||
|
return _notifier.checkPermission();
|
||
|
}
|
||
|
|
||
|
window.Notifier.IsGetPermission = function() {
|
||
|
return (_notifier === 0);
|
||
|
}
|
||
|
|
||
|
window.Notifier.Disable = function() {
|
||
|
return (_notifier.checkPermission === 2);
|
||
|
}
|
||
|
|
||
|
window.Notifier.RequestPermission = function(cb) {
|
||
|
_notifier.requestPermission(function() {
|
||
|
if(cb) {cb(_notifier.checkPermission() == 0)}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//type = 1;关闭上一个
|
||
|
window.Notifier.Close = function(type) {
|
||
|
if(type = 1) {
|
||
|
tmp = queue.pop();
|
||
|
} else {
|
||
|
tmp = queue.shift();
|
||
|
}
|
||
|
_closeItem(tmp);
|
||
|
}
|
||
|
|
||
|
window.Notifier.ClosePre = function () {
|
||
|
tmp = queue.pop();
|
||
|
_closeItem(tmp);
|
||
|
}
|
||
|
|
||
|
window.Notifier.CloseLast = function () {
|
||
|
tmp = queue.shift();
|
||
|
_closeItem(tmp);
|
||
|
}
|
||
|
|
||
|
window.Notifier.CloseAll = function() {
|
||
|
while(queue.length > 0) {
|
||
|
var tmp = queue.shift();
|
||
|
_closeItem(tmp);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
window.Notifier.Notify = function(icon, title, body) {
|
||
|
if (this.IsGetPermission() == 0) {
|
||
|
|
||
|
|
||
|
var popup = _createNotificationAndShow(icon, title, body);
|
||
|
if(undefined == popup) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
switch(type) {
|
||
|
case 2:
|
||
|
if(queue.length > 0) {
|
||
|
tmp = queue.pop();
|
||
|
_closeItem(tmp);
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
while(queue.length >= c) {
|
||
|
tmp = queue.shift();
|
||
|
_closeItem(tmp);
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
setTimeout(function(){_closeItem(popup);}, t*1000);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
var q = queue;
|
||
|
popup.onclose = function(){
|
||
|
var cur = q.indexOf(popup);
|
||
|
if(cur >= 0) {
|
||
|
q.splice(cur, 1);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
popup.onclick = function(){};
|
||
|
|
||
|
queue.push(popup);
|
||
|
return true;
|
||
|
} else {
|
||
|
RequestPermission();
|
||
|
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function _createNotificationAndShow(icon, title, body) {
|
||
|
if(undefined != window.webkitNotifications && _notifier.name === window.webkitNotifications.name) {
|
||
|
var n = _notifier.createNotification(icon, title, body);
|
||
|
n.show();
|
||
|
return n;
|
||
|
|
||
|
}else if (undefined !== window.Notification && _notifier.name === window.Notification.name) {
|
||
|
return new _notifier(title, {icon:icon, body: body});
|
||
|
} else {
|
||
|
// console.log('error not found notification!')
|
||
|
// alert(title +"\n\n"+body);
|
||
|
return undefined;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _closeItem(n) {
|
||
|
if(undefined == n) {
|
||
|
return
|
||
|
}
|
||
|
if(n.cancel) {
|
||
|
n.cancel();
|
||
|
} else {
|
||
|
n.close();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
})(window);
|
||
|
|