Mercurial > libervia-web
diff browser_side/notification.py @ 328:835a8ae799e7
Add notifications support, fixes bug 7.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sat, 23 Feb 2013 16:27:32 +0100 |
parents | |
children | f9130176bc8d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser_side/notification.py Sat Feb 23 16:27:32 2013 +0100 @@ -0,0 +1,45 @@ +from __pyjamas__ import JS + + +class Notification(object): + """ + If the browser supports it, the user allowed it to and the tab is in the + background, send desktop notifications on messages. + + Requires both Web Notifications and Page Visibility API. + """ + + def __init__(self): + JS(""" + this.enabled = false; + + if (!('hidden' in document)) + document.hidden = false; + + if (!('Notification' in window)) + return; + + if (Notification.permission === 'granted') + this.enabled = true; + + else if (Notification.permission === 'default') { + Notification.requestPermission(function(permission){ + if (permission !== 'granted') + return; + + this.enabled = true; + }); + } + """) + + def notify(self, title, body, icon='/media/icons/apps/48/sat.png'): + JS(""" + if (this.enabled && document.hidden) { + notification = Notification(title, {body: body, icon: icon}); + + // Probably won’t work, but it doesn’t hurt to try. + notification.addEventListener('click', function() { + window.focus(); + }); + } + """)