Files
MYSOPHAL/js/notifications_ajax.min.js
2025-08-07 13:15:31 +01:00

1 line
2.0 KiB
JavaScript

(function(i,t){function o(n){var e=this;var s=t("<div></div>");var a=t("<div></div>");this.options=t.extend({},o.default,n);this.showNotification=function(o,n,a,r){s.queue((function(){var s=this;setTimeout((function(){t(s).dequeue()}),100);var c=new Notification(n,{body:a,icon:e.options.icon});if(typeof r!="undefined"&&r!=null){c.url_item=CFG_GLPI.url_base+"/"+r;c.onclick=function(t){t.preventDefault();i.open(this.url_item,"_blank")}}t.ajax({url:CFG_GLPI.root_doc+"/ajax/notifications_ajax.php",method:"GET",data:{delete:o}})}))};this.playAudio=function(o){if(!o||!("Audio"in i)){return false}var n=new Audio;t(n).append(t("<source />",{src:CFG_GLPI.root_doc+"/sound/"+o+".mp3",type:"audio/mpeg"}));t(n).append(t("<source />",{src:CFG_GLPI.root_doc+"/sound/"+o+".ogg",type:"audio/ogg"}));a.queue((function(){var i=this;n.onended=function(){t(i).dequeue()};n.play()}))};this.checkNewNotifications=function(){if(!e.isSupported()){return false}var i=t.getJSON(CFG_GLPI.root_doc+"/ajax/notifications_ajax.php");i.done((function(i){if(i){for(var t=0;t<i.length;t++){var o=i[t];e.showNotification(o.id,o.title,o.body,o.url)}if(e.options.sound){e.playAudio(e.options.sound)}}}))};this.checkConcurrence=function(){var i="glpi_ajaxnotification_lastcheck_"+this.options.user_id;var t=localStorage.getItem(i);if(!t){t=0}var o=(new Date).getTime();if(t<=o-this.options.interval+50){localStorage.setItem(i,o);this.checkNewNotifications()}};this.startMonitoring=function(){this.checkConcurrence();setInterval(this.checkConcurrence.bind(this),this.options.interval)};this.checkPermission=function(){if(Notification.permission==="granted"){this.startMonitoring()}else if(Notification.permission!=="denied"){Notification.requestPermission((function(i){if(i==="granted"){this.startMonitoring()}}))}};this.start=function(){if(!this.isSupported()){return false}this.checkPermission()};this.isSupported=function(){return"Notification"in i&&"localStorage"in i}}o.default={interval:1e4,sound:false,icon:false,user_id:0};i.GLPINotificationsAjax=o})(window,jQuery);