Seditio Source
Root |
./othercms/xenForo 2.2.8/js/xf/service_worker.js
// ##########################################################################
// DEPRECATED: The service_worker.js file in the root should be used instead.
// ##########################################################################

"use strict";

self.addEventListener('push', function(event)
{
if (!(self.Notification && self.Notification.permission === 'granted'))
{
return;
}

try
{
var data = event.data.json();
}
catch (e)
{
console.warn('Received push notification but payload not in the expected format.', e);
console.warn('Received data:', event.data.text());
return;
}

if (!data || !data.title || !data.body)
{
console.warn('Received push notification but no payload data or required fields missing.', data);
return;
}

data.last_count = 0;

var options = {
body: data.body,
dir: data.dir || 'ltr',
data: data
};
if (data.badge)
{
options.badge = data.badge;
}
if (data.icon)
{
options.icon = data.icon;
}

var notificationPromise;

if (data.tag && data.tag_phrase)
{
options.tag = data.tag;
options.renotify = true;

notificationPromise = self.registration.getNotifications({ tag: data.tag })
.then(function(notifications)
{
var lastKey = (notifications.length - 1),
notification = notifications[lastKey],
count = 0;

if (notification)
{
count = parseInt(notification.data.last_count, 10) + 1;
options.data.last_count = count;

options.body = options.body +  ' ' + data.tag_phrase.replace('{count}', count.toString());
}

return self.registration.showNotification(data.title, options);
});
}
else
{
notificationPromise = self.registration.showNotification(data.title, options);
}

event.waitUntil(notificationPromise);
});

self.addEventListener('notificationclick', function(event)
{
var notification = event.notification;

notification.close();

if (notification.data.url)
{
event.waitUntil(clients.openWindow(notification.data.url));
}
});