From 57fffb6572dd4fa8257357b42448cd2bbeb8d586 Mon Sep 17 00:00:00 2001 From: vantezzen Date: Mon, 22 Jun 2020 10:40:27 +0200 Subject: Update repository --- uncompressed/rocketchat/index.js | 39 +++++++++++++----------------- uncompressed/rocketchat/package.json | 2 +- uncompressed/rocketchat/webview.js | 16 ++++++------ uncompressed/workplace/index.js | 3 +-- uncompressed/workplace/package.json | 10 ++++---- uncompressed/workplace/webview.js | 47 +++++++++++++++++++++++++++++++----- 6 files changed, 74 insertions(+), 43 deletions(-) (limited to 'uncompressed') diff --git a/uncompressed/rocketchat/index.js b/uncompressed/rocketchat/index.js index 349ed36..54450ce 100644 --- a/uncompressed/rocketchat/index.js +++ b/uncompressed/rocketchat/index.js @@ -1,26 +1,21 @@ -'use strict'; - -function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } +"use strict"; module.exports = Franz => class RocketChat extends Franz { - validateUrl(url) { - return _asyncToGenerator(function* () { - try { - const resp = yield window.fetch(`${url}/api/info`, { - method: 'GET', - headers: { - 'Content-Type': 'application/json' - } - }); - const data = yield resp.json(); - - return Object.hasOwnProperty.call(data, 'version'); - } catch (err) { - console.error(err); - } + async validateUrl(url) { + try { + const resp = await window.fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json' + } + }); + const status = resp.status.toString(); + return status.startsWith('2') || status.startsWith('3'); + } catch (err) { + console.error(err); + } - return false; - })(); + return false; } -}; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvY2tldGNoYXQvaW5kZXguanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIkZyYW56IiwiUm9ja2V0Q2hhdCIsInZhbGlkYXRlVXJsIiwidXJsIiwicmVzcCIsIndpbmRvdyIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImRhdGEiLCJqc29uIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZXJyIiwiY29uc29sZSIsImVycm9yIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUFBLE9BQU9DLE9BQVAsR0FBaUJDLFNBQVMsTUFBTUMsVUFBTixTQUF5QkQsS0FBekIsQ0FBK0I7QUFDakRFLGFBQU4sQ0FBa0JDLEdBQWxCLEVBQXVCO0FBQUE7QUFDckIsVUFBSTtBQUNGLGNBQU1DLE9BQU8sTUFBTUMsT0FBT0MsS0FBUCxDQUFjLEdBQUVILEdBQUksV0FBcEIsRUFBZ0M7QUFDakRJLGtCQUFRLEtBRHlDO0FBRWpEQyxtQkFBUztBQUNQLDRCQUFnQjtBQURUO0FBRndDLFNBQWhDLENBQW5CO0FBTUEsY0FBTUMsT0FBTyxNQUFNTCxLQUFLTSxJQUFMLEVBQW5COztBQUVBLGVBQU9DLE9BQU9DLGNBQVAsQ0FBc0JDLElBQXRCLENBQTJCSixJQUEzQixFQUFpQyxTQUFqQyxDQUFQO0FBQ0QsT0FWRCxDQVVFLE9BQU9LLEdBQVAsRUFBWTtBQUNaQyxnQkFBUUMsS0FBUixDQUFjRixHQUFkO0FBQ0Q7O0FBRUQsYUFBTyxLQUFQO0FBZnFCO0FBZ0J0QjtBQWpCc0QsQ0FBekQiLCJmaWxlIjoicm9ja2V0Y2hhdC9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gRnJhbnogPT4gY2xhc3MgUm9ja2V0Q2hhdCBleHRlbmRzIEZyYW56IHtcbiAgYXN5bmMgdmFsaWRhdGVVcmwodXJsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB3aW5kb3cuZmV0Y2goYCR7dXJsfS9hcGkvaW5mb2AsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwLmpzb24oKTtcblxuICAgICAgcmV0dXJuIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsICd2ZXJzaW9uJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIl19 \ No newline at end of file + +}; \ No newline at end of file diff --git a/uncompressed/rocketchat/package.json b/uncompressed/rocketchat/package.json index 61c77e8..7200d76 100644 --- a/uncompressed/rocketchat/package.json +++ b/uncompressed/rocketchat/package.json @@ -1,7 +1,7 @@ { "id": "rocketchat", "name": "Rocket.Chat", - "version": "1.0.6", + "version": "1.0.8", "description": "Rocket.Chat", "main": "index.js", "author": "Stefan Malzner ", diff --git a/uncompressed/rocketchat/webview.js b/uncompressed/rocketchat/webview.js index 1e26ac9..5ccd0d2 100644 --- a/uncompressed/rocketchat/webview.js +++ b/uncompressed/rocketchat/webview.js @@ -1,10 +1,11 @@ -'use strict'; +"use strict"; -const { ipcRenderer } = require('electron'); +const { + ipcRenderer +} = require('electron'); const getTeamIcon = function getTeamIcon() { console.log('getTeamIcon'); - const manifestElement = document.querySelector('link[rel="manifest"]'); if (manifestElement == null) { @@ -12,12 +13,14 @@ const getTeamIcon = function getTeamIcon() { } const manifestUrl = manifestElement.getAttribute('href'); + console.log(manifestUrl); if (manifestUrl == null) { return; } const xmlhttp = new XMLHttpRequest(); + xmlhttp.onreadystatechange = function () { if (this.readyState != 4 || this.status != 200) { return; @@ -26,9 +29,10 @@ const getTeamIcon = function getTeamIcon() { const response = JSON.parse(this.responseText); if (response.icons.length >= 1) { - ipcRenderer.sendToHost('avatar', `${window.location.protocol}//${window.location.host}/${response.icons[0].src}`); + ipcRenderer.sendToHost('avatar', `${window.location.protocol}//${window.location.host}${response.icons[0].src}`); } }; + xmlhttp.open('GET', manifestUrl, true); xmlhttp.send(); }; @@ -41,9 +45,7 @@ module.exports = Franz => { }; Franz.loop(getMessages); - setTimeout(() => { getTeamIcon(); }, 4000); -}; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvY2tldGNoYXQvd2Vidmlldy5qcyJdLCJuYW1lcyI6WyJpcGNSZW5kZXJlciIsInJlcXVpcmUiLCJnZXRUZWFtSWNvbiIsImNvbnNvbGUiLCJsb2ciLCJtYW5pZmVzdEVsZW1lbnQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJtYW5pZmVzdFVybCIsImdldEF0dHJpYnV0ZSIsInhtbGh0dHAiLCJYTUxIdHRwUmVxdWVzdCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsImljb25zIiwibGVuZ3RoIiwic2VuZFRvSG9zdCIsIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJob3N0Iiwic3JjIiwib3BlbiIsInNlbmQiLCJtb2R1bGUiLCJleHBvcnRzIiwiRnJhbnoiLCJnZXRNZXNzYWdlcyIsImRpcmVjdE1lc3NhZ2VzIiwiTWF0aCIsInJvdW5kIiwicXVlcnlTZWxlY3RvckFsbCIsImluZGlyZWN0TWVzc2FnZXMiLCJzZXRCYWRnZSIsImxvb3AiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU0sRUFBRUEsV0FBRixLQUFrQkMsUUFBUSxVQUFSLENBQXhCOztBQUVBLE1BQU1DLGNBQWMsU0FBU0EsV0FBVCxHQUF1QjtBQUN6Q0MsVUFBUUMsR0FBUixDQUFZLGFBQVo7O0FBRUEsUUFBTUMsa0JBQWtCQyxTQUFTQyxhQUFULENBQXVCLHNCQUF2QixDQUF4Qjs7QUFFQSxNQUFJRixtQkFBbUIsSUFBdkIsRUFBNkI7QUFDM0I7QUFDRDs7QUFFRCxRQUFNRyxjQUFjSCxnQkFBZ0JJLFlBQWhCLENBQTZCLE1BQTdCLENBQXBCOztBQUVBLE1BQUlELGVBQWUsSUFBbkIsRUFBeUI7QUFDdkI7QUFDRDs7QUFFRCxRQUFNRSxVQUFVLElBQUlDLGNBQUosRUFBaEI7QUFDQUQsVUFBUUUsa0JBQVIsR0FBNkIsWUFBWTtBQUN2QyxRQUFJLEtBQUtDLFVBQUwsSUFBbUIsQ0FBbkIsSUFBd0IsS0FBS0MsTUFBTCxJQUFlLEdBQTNDLEVBQWdEO0FBQzlDO0FBQ0Q7O0FBRUQsVUFBTUMsV0FBV0MsS0FBS0MsS0FBTCxDQUFXLEtBQUtDLFlBQWhCLENBQWpCOztBQUVBLFFBQUlILFNBQVNJLEtBQVQsQ0FBZUMsTUFBZixJQUF5QixDQUE3QixFQUFnQztBQUM5QnBCLGtCQUFZcUIsVUFBWixDQUF1QixRQUF2QixFQUFrQyxHQUFFQyxPQUFPQyxRQUFQLENBQWdCQyxRQUFTLEtBQUlGLE9BQU9DLFFBQVAsQ0FBZ0JFLElBQUssSUFBR1YsU0FBU0ksS0FBVCxDQUFlLENBQWYsRUFBa0JPLEdBQUksRUFBL0c7QUFDRDtBQUNGLEdBVkQ7QUFXQWhCLFVBQVFpQixJQUFSLENBQWEsS0FBYixFQUFvQm5CLFdBQXBCLEVBQWlDLElBQWpDO0FBQ0FFLFVBQVFrQixJQUFSO0FBQ0QsQ0E3QkQ7O0FBK0JBQyxPQUFPQyxPQUFQLEdBQWtCQyxLQUFELElBQVc7QUFDMUIsUUFBTUMsY0FBYyxTQUFTQSxXQUFULEdBQXVCO0FBQ3pDLFVBQU1DLGlCQUFpQkMsS0FBS0MsS0FBTCxDQUFXN0IsU0FBUzhCLGdCQUFULENBQTBCLHdDQUExQixFQUFvRWhCLE1BQXBFLEdBQTZFLENBQXhGLENBQXZCO0FBQ0EsVUFBTWlCLG1CQUFtQkgsS0FBS0MsS0FBTCxDQUFXN0IsU0FBUzhCLGdCQUFULENBQTBCLHFEQUExQixFQUFpRmhCLE1BQWpGLEdBQTBGLENBQXJHLENBQXpCO0FBQ0FXLFVBQU1PLFFBQU4sQ0FBZUwsY0FBZixFQUErQkksZ0JBQS9CO0FBQ0QsR0FKRDs7QUFNQU4sUUFBTVEsSUFBTixDQUFXUCxXQUFYOztBQUVBUSxhQUFXLE1BQU07QUFDZnRDO0FBQ0QsR0FGRCxFQUVHLElBRkg7QUFHRCxDQVpEIiwiZmlsZSI6InJvY2tldGNoYXQvd2Vidmlldy5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHsgaXBjUmVuZGVyZXIgfSA9IHJlcXVpcmUoJ2VsZWN0cm9uJyk7XG5cbmNvbnN0IGdldFRlYW1JY29uID0gZnVuY3Rpb24gZ2V0VGVhbUljb24oKSB7XG4gIGNvbnNvbGUubG9nKCdnZXRUZWFtSWNvbicpO1xuXG4gIGNvbnN0IG1hbmlmZXN0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbcmVsPVwibWFuaWZlc3RcIl0nKTtcblxuICBpZiAobWFuaWZlc3RFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtYW5pZmVzdFVybCA9IG1hbmlmZXN0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblxuICBpZiAobWFuaWZlc3RVcmwgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHhtbGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgeG1saHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPSA0IHx8IHRoaXMuc3RhdHVzICE9IDIwMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG5cbiAgICBpZiAocmVzcG9uc2UuaWNvbnMubGVuZ3RoID49IDEpIHtcbiAgICAgIGlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoJ2F2YXRhcicsIGAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9LyR7cmVzcG9uc2UuaWNvbnNbMF0uc3JjfWApO1xuICAgIH1cbiAgfTtcbiAgeG1saHR0cC5vcGVuKCdHRVQnLCBtYW5pZmVzdFVybCwgdHJ1ZSk7XG4gIHhtbGh0dHAuc2VuZCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAoRnJhbnopID0+IHtcbiAgY29uc3QgZ2V0TWVzc2FnZXMgPSBmdW5jdGlvbiBnZXRNZXNzYWdlcygpIHtcbiAgICBjb25zdCBkaXJlY3RNZXNzYWdlcyA9IE1hdGgucm91bmQoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnVucmVhZC51bnJlYWQtbWVudGlvbiwgLmJhZGdlLS11bnJlYWQnKS5sZW5ndGggLyAyKTtcbiAgICBjb25zdCBpbmRpcmVjdE1lc3NhZ2VzID0gTWF0aC5yb3VuZChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudW5yZWFkOm5vdCgudW5yZWFkLW1lbnRpb24pLCAuc2lkZWJhci1pdGVtLS11bnJlYWQnKS5sZW5ndGggLyAyKTtcbiAgICBGcmFuei5zZXRCYWRnZShkaXJlY3RNZXNzYWdlcywgaW5kaXJlY3RNZXNzYWdlcyk7XG4gIH07XG5cbiAgRnJhbnoubG9vcChnZXRNZXNzYWdlcyk7XG5cbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgZ2V0VGVhbUljb24oKTtcbiAgfSwgNDAwMCk7XG59O1xuIl19 \ No newline at end of file +}; \ No newline at end of file diff --git a/uncompressed/workplace/index.js b/uncompressed/workplace/index.js index c638730..e8243fb 100644 --- a/uncompressed/workplace/index.js +++ b/uncompressed/workplace/index.js @@ -1,4 +1,3 @@ "use strict"; -module.exports = Franz => Franz; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndvcmtwbGFjZS9pbmRleC5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiRnJhbnoiXSwibWFwcGluZ3MiOiI7O0FBQUFBLE9BQU9DLE9BQVAsR0FBaUJDLFNBQVNBLEtBQTFCIiwiZmlsZSI6IndvcmtwbGFjZS9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gRnJhbnogPT4gRnJhbno7XG4iXX0= \ No newline at end of file +module.exports = Franz => Franz; \ No newline at end of file diff --git a/uncompressed/workplace/package.json b/uncompressed/workplace/package.json index 596daea..cb2193f 100644 --- a/uncompressed/workplace/package.json +++ b/uncompressed/workplace/package.json @@ -1,16 +1,16 @@ { "id": "workplace", "name": "Workplace", - "version": "1.0.0", + "version": "1.1.1", "description": "Workplace by facebook", "main": "index.js", - "author": "Rico Herwig ", + "author": "Rico Herwig , Stefan Malzner ", "license": "MIT", "config": { - "serviceURL": "https://{teamId}.facebook.com/chat", + "serviceURL": "https://{teamId}.workplace.com/chat", "hasNotificationSound": true, "hasDirectMessages": true, "hasTeamId": true, - "urlInputSuffix": ".facebook.com" + "urlInputSuffix": ".workplace.com" } - } \ No newline at end of file + } diff --git a/uncompressed/workplace/webview.js b/uncompressed/workplace/webview.js index c1df892..a26515e 100644 --- a/uncompressed/workplace/webview.js +++ b/uncompressed/workplace/webview.js @@ -1,16 +1,51 @@ -'use strict'; +"use strict"; const path = require('path'); module.exports = Franz => { const getMessages = () => { - const $messages = document.querySelector('.uiScrollableAreaContent'); - const $unreadMessages = $messages.querySelectorAll('._1ht3 ._1ht6'); + let direct = 0; + let indirect = 0; + const chatsElement = document.querySelector('#chats'); + const notifications = document.querySelector('#notifications span span'); - Franz.setBadge($unreadMessages.length); + if (notifications) { + indirect = parseInt(notifications.innerText, 10); + } + + if (chatsElement) { + if (!chatsElement.hasAttribute('aria-current')) { + const chatMessages = chatsElement.querySelector('span'); + + if (chatMessages) { + direct = parseInt(chatMessages.innerText, 10); + } + } else { + direct = document.querySelectorAll('[data-pagelet="WorkGalahadChannel"] .uiList [role="gridcell"] [role="button"] .oxk9n0fw').length; + } + } + + Franz.setBadge(direct, indirect); }; Franz.injectCSS(path.join(__dirname, 'workplace.css')); Franz.loop(getMessages); -}; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndvcmtwbGFjZS93ZWJ2aWV3LmpzIl0sIm5hbWVzIjpbInBhdGgiLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsIkZyYW56IiwiZ2V0TWVzc2FnZXMiLCIkbWVzc2FnZXMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCIkdW5yZWFkTWVzc2FnZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwic2V0QmFkZ2UiLCJsZW5ndGgiLCJpbmplY3RDU1MiLCJqb2luIiwiX19kaXJuYW1lIiwibG9vcCJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNQSxPQUFPQyxRQUFRLE1BQVIsQ0FBYjs7QUFFQUMsT0FBT0MsT0FBUCxHQUFrQkMsS0FBRCxJQUFXO0FBQzFCLFFBQU1DLGNBQWMsTUFBTTtBQUN4QixVQUFNQyxZQUFZQyxTQUFTQyxhQUFULENBQXVCLDBCQUF2QixDQUFsQjtBQUNBLFVBQU1DLGtCQUFrQkgsVUFBVUksZ0JBQVYsQ0FBMkIsZUFBM0IsQ0FBeEI7O0FBRUFOLFVBQU1PLFFBQU4sQ0FBZUYsZ0JBQWdCRyxNQUEvQjtBQUNELEdBTEQ7O0FBT0FSLFFBQU1TLFNBQU4sQ0FBZ0JiLEtBQUtjLElBQUwsQ0FBVUMsU0FBVixFQUFxQixlQUFyQixDQUFoQjtBQUNBWCxRQUFNWSxJQUFOLENBQVdYLFdBQVg7QUFDRCxDQVZEIiwiZmlsZSI6IndvcmtwbGFjZS93ZWJ2aWV3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoRnJhbnopID0+IHtcbiAgY29uc3QgZ2V0TWVzc2FnZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgJG1lc3NhZ2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnVpU2Nyb2xsYWJsZUFyZWFDb250ZW50Jyk7XG4gICAgY29uc3QgJHVucmVhZE1lc3NhZ2VzID0gJG1lc3NhZ2VzLnF1ZXJ5U2VsZWN0b3JBbGwoJy5fMWh0MyAuXzFodDYnKTtcblxuICAgIEZyYW56LnNldEJhZGdlKCR1bnJlYWRNZXNzYWdlcy5sZW5ndGgpO1xuICB9O1xuXG4gIEZyYW56LmluamVjdENTUyhwYXRoLmpvaW4oX19kaXJuYW1lLCAnd29ya3BsYWNlLmNzcycpKTtcbiAgRnJhbnoubG9vcChnZXRNZXNzYWdlcyk7XG59O1xuIl19 \ No newline at end of file + localStorage._cs_desktopNotifsEnabled = JSON.stringify({ + __t: new Date().getTime(), + __v: true + }); + + if (typeof Franz.onNotify === 'function') { + Franz.onNotify(notification => { + if (typeof notification.title !== 'string') { + notification.title = ((notification.title.props || {}).content || [])[0] || 'Work Chat'; + } + + if (typeof notification.options.body !== 'string') { + notification.options.body = (((notification.options.body || {}).props || {}).content || [])[0] || ''; + } + + return notification; + }); + } +}; \ No newline at end of file -- cgit v1.2.3-70-g09d2