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();
+            });
+        }
+        """)