diff options
Diffstat (limited to 'src/main/assets/sw.js')
-rw-r--r-- | src/main/assets/sw.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/main/assets/sw.js b/src/main/assets/sw.js new file mode 100644 index 00000000..a64de7cc --- /dev/null +++ b/src/main/assets/sw.js @@ -0,0 +1,47 @@ +/// <reference no-default-lib="true"/> +/// <reference lib="esnext" /> +/// <reference lib="WebWorker" /> + +var sw = /** @type {ServiceWorkerGlobalScope & typeof self} */ (self) +sw.addEventListener('install', function() { + sw.skipWaiting() +}) +sw.addEventListener('activate', function() { + sw.clients.claim() +}) +sw.addEventListener('push', function(evt) { + if (evt.data) { + const data = evt.data.json() + console.log('Push', data) + if (data.body) { + sw.registration.showNotification(data.title, { + body: data.body, + icon: data.custom.message.user.avatar, + tag: data.tag, + data: data.custom.message + }) + } + } +}) +sw.addEventListener('notificationclick', function(evt) { + evt.waitUntil( + sw.clients.matchAll().then(function(clientList) { + const message = evt.notification.data + const url = message.mid + ? message.rid + ? `https://juick.com/m/${message.mid}#${message.rid}` + : `https://juick.com/m/${message.mid}` + : 'https://juick.com/pm/inbox' + if (clientList.length > 0) { + for (var i = 0; i < clientList.length; i++) { + if (clientList[i].url === url) { + return clientList[i].focus() + } + } + clientList[0].navigate(url) + return clientList[0].focus() + } + return sw.clients.openWindow(url) + }) + ) +}) |