view browser_side/notification.py @ 381:b96b8b666d17

plugin card_game: update to use the new XMLUI mechanism + copy the autoplay mode from QuickFrontend: TODO: the new round is not starting after the scores have been displayed
author souliane <souliane@mailoo.org>
date Wed, 26 Feb 2014 02:28:19 +0100
parents 835a8ae799e7
children f9130176bc8d
line wrap: on
line source

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