diff options
Diffstat (limited to 'static/js')
-rw-r--r-- | static/js/lafargue.js | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/static/js/lafargue.js b/static/js/lafargue.js index f1198cb..baf7112 100644 --- a/static/js/lafargue.js +++ b/static/js/lafargue.js @@ -1,10 +1,17 @@ jQuery(function($) { + var notificationsp = false; + if (WebSocket) { var websocket_base = $('head').attr('data-websocket-base'); var open_socket = function() { var socket = new WebSocket(websocket_base + '/lafargue/events'); socket.onmessage = function(event) { - $('.lafargue-list').prepend(event.data); + var message = JSON.parse(event.data); + $('.lafargue-list').prepend(message.html); + if (window.webkitNotifications && notificationsp) { + var notification = window.webkitNotifications.createNotification(null, '', 'Lafargue', 'New message by ' + message.first_name); + notification.show(); + } }; var reconnect = function() { window.setTimeout(function() { @@ -16,4 +23,40 @@ jQuery(function($) { }; open_socket(); } + + var updateNotificationStatus = function() { + var status = $('#notification-status'); + if (notificationsp) { + status.removeClass('bad'); + status.addClass('good'); + status.html('Notifications are ON.'); + } else { + status.addClass('bad'); + status.removeClass('good'); + status.html('Notifications are OFF.'); + } + }; + + var toggleNotifications = function() { + if (!notificationsp) { + if (!window.webkitNotifications.checkPermission() !== 0) { + window.webkitNotifications.requestPermission(function() { + updateNotificationStatus(); + }); + } + notificationsp = true; + } else { + notificationsp = false; + updateNotificationStatus(); + } + }; + + if (window.webkitNotifications) { + var notify_button = $('.notifications').append('<a href="#" class="notify"><div id="notification-status" class="notification bad">Notifications are OFF.</div></a>'); + notify_button.click(toggleNotifications); + if (window.webkitNotifications.checkPermission() === 0) { + notificationsp = true; + } + updateNotificationStatus(); + }; }); |