gdoo/public/assets/chat/js/notify.js

191 lines
6.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 桌面通知插件(支持IE啊)
* var notify = notifyClass({
* 'sound':'声音文件地址','soundbo':true,'icon':'通知图标'
* });
* notify.showpopup('这是个通知?');
* soundbo 声音提示
* sound 声音文件地址
*/
function notifyClass(opts){
var me = this;
this.title = '系统提醒';
this.icon = 'images/logo.png';
this.notbool =true;
this.lastmsg = '';
this.sound = '';
this.sounderr= '';
this.soundbo = true;
this.showbool= false;
this._init=function() {
if (opts) for(var o1 in opts)this[o1]=opts[o1];
var strsr = '';
if (typeof(Notification)=='undefined') {
this.notbool = false;
strsr = '<bgsound id="notify_sound_audio" src="" hidden="true" autostart="false" loop="false">';
} else {
strsr = '<audio id="notify_sound_audio" hidden="true" src="'+this.sound+'"></audio>';
}
if(this.sound)$('body').append(strsr);
};
this.setsound = function(bo){
this.soundbo=bo;
};
this.opennotify = function(clsfun){
if(!this.notbool)return false;
if(!clsfun)clsfun=function(){};
if(Notification.permission === 'granted')return false;
if(Notification.permission !== 'denied') {
Notification.requestPermission(function (permission) {
clsfun();
if(!('permission' in Notification)) {
Notification.permission = permission;
}
if(permission==='granted') {
}
});
}
};
this.showpopup = function(msg,cans){
this.lastmsg = msg;
var can = {body:msg,icon:this.icon,soundbo:this.soundbo,sound:this.sound,tag:'rockwebkitMeteoric',title:this.title,click:function(){}};
if(cans)for(var oi in cans)can[oi]=cans[oi];
var clsfun=can.click,title=can.title;
if(this.showbool)this.show(can);
if(!this.notbool){
this._showpopupie(msg,clsfun,can);
return;
}else{
var lx = this.getaccess();
if(lx!='ok'){
this.opennotify();
}
}
var notification = new Notification(title, can);
notification.onclick = function(){
var salx=clsfun(can);
if(!salx)nwjs.winshow();
this.close();
};
this.notification = notification;
if(can.soundbo)this.playsound(can.sound);
};
this.close = function(){
try{
if(this.notification)this.notification.close();
}catch(e){}
this.notification = false;
};
this.playsound=function(src){
if(!src)src=this.sound;
var boa=document.getElementById('notify_sound_audio');
if(boa){
boa.src=src;
if(boa.play)boa.play();
}
};
this.playerrsound=function(src){
if(!src)src=this.sounderr;
if(src)this.playsound(src);
};
this.getaccess=function(){
var lx = 'none';
if(typeof(Notification)=='undefined'){
lx='ok';
return lx;
}
lx = Notification.permission;
if(lx=='granted'){lx='ok';}else if(lx=='denied'){lx='jz';}else{lx='mr';}
return lx;
};
this._showpopupie=function(msg, clsfun, can){
if(typeof(createPopup)=='undefined')return;
var x = window.screenLeft?window.screenLeft: window.screenX,
y = window.screenTop?window.screenTop: window.screenY;
var w = 310,h=80;
var l = screen.width-x-w-10,
t = screen.height-y-h-60;
var p=window.createPopup();
var pbody=p.document.body;
pbody.style.backgroundColor='#f5f5f5';
pbody.style.border= 'solid #cccccc 1px';
msg = msg.replace(/\n/gi,'<br>');
var s = '<div style="cursor:pointer">';
s+='<span id="createPopup_close" style="position:absolute;right:0px;top:0px;cursor:pointer;">×</span>';
s+='<table id="createPopup_body"><tr valign="top">';
s+='<td style="padding:5px"><img width="60px" src="'+can.icon+'" height="60px"><td>';
s+='<td style="padding:0px 5px"><div style="font-size:14px;line-height:20px;padding-top:3px" align="left"><b>'+can.title+'</b></div><div style="font-size:12px;padding-top:3px;height:50px;overflow:hidden;">'+msg+'</div><td>';
s+='</tr></table>';
s+='</div>';
pbody.innerHTML=s;
p.show(l,t,w,h,document.body);
p.document.getElementById('createPopup_close').onclick=function(){p.hide();};
p.document.getElementById('createPopup_body').onclick=function(){
var salx = clsfun(can);
if(!salx) nwjs.winshow();
p.hide();
};
if(can.soundbo)this.playsound(can.sound);
};
this.getnotifystr=function(ostr){
var slx = '<font color="green">[已开启]</font>';
var olx = this.getaccess();
if(olx=='jz'){
slx = '<font color="red">[已禁止]</font>,<a href="http://www.gdoo.net/view_notify.html" target="_blank">(去设置)</a>';
}
if(olx=='mr'){
slx = '<font color="#ff6600">[未开启]</font><a onclick="'+ostr+'" href="javascript:;">[开启]</a>';
}
return slx;
};
// 右边提示的
this.show = function(cans) {
if(!cans)cans={};
var can = {body:'',icon:'/assets/chat/images/web/todo.png',type:'info',right:'30px',top:'80px',closetime:0,soundbo:this.soundbo,sound:this.sound,title:this.title,click:false,rand:js.getrand()};
if(cans)for(var oi in cans)can[oi]=cans[oi];
var coarr = {
'info':['#31708f', '#d9edf7','#bce8f1'],
'success':['#3c763d', '#dff0d8','#d6e9c6'],
'error':['#a94442', '#f2dede','#ebccd1'],
'wait':['#8a6d3b', '#fcf8e3','#faebcc']
};
var cos = coarr[can.type],id = 'notify_show_'+can.rand+'';
$('#'+id+'').remove();
var wz = this.showwei(can.right,can.top),mess=can.body
mess = mess.replace(/\n/gi, '<br>');
var s = '<div id="'+id+'" temp="notifyshow" class="boxs" style="position:absolute;z-index:70;right:'+wz[0]+';top:'+wz[1]+';border:1px '+cos[2]+' solid; background:'+cos[1]+';color:'+cos[0]+';border-radius:5px">';
if(can.closetime==0)s+='<div onclick="$(this).parent().fadeOut(function(){$(this).remove()})" style="position:absolute;right:3px;top:0px;cursor:pointer">×</div>';
s+='<table style="margin:15px"><tr valign="top">';
s+=' <td width="53px" align="left"><img style="width:40px;height:40px" src="'+can.icon+'"></td>';
s+=' <td id="'+id+'_td" align="left"><div style="padding-bottom:3px;font-size:14px"><b>'+can.title+'</b></div><div>'+mess+'</div></td>';
s+='</tr></table>';
s+='</div>';
$('body').append(s);
if(can.closetime>0)setTimeout(function(){me.showclose(id)}, can.closetime*1000);
if(typeof(can.click)=='function'){
var clsfun=can.click;
$('#'+id+'_td').click(function(){
var salx=clsfun(can);
me.showclose(id);
});
}
};
this.showwei=function(r,t){
var cas = $("div[temp='notifyshow']");
if(cas.length>0){
var o = cas[cas.length-1];
var t1 = parseInt(o.style.top)+$(o).height()+20;
t = ''+t1+'px';
}
return [r,t];
};
this.showclose=function(id){
$('#'+id+'').fadeOut(function(){$(this).remove();})
}
this._init();
}