From 6260d948a748701fd377ebf9497db926b9b7e188 Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Fri, 29 Apr 2016 14:25:07 +0000 Subject: [PATCH] Implement Web Notification API into egw_notification --- api/js/jsapi/egw.js | 1 + api/js/jsapi/egw_notification.js | 81 ++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 api/js/jsapi/egw_notification.js diff --git a/api/js/jsapi/egw.js b/api/js/jsapi/egw.js index cb0b65b82d..5abe6ea438 100644 --- a/api/js/jsapi/egw.js +++ b/api/js/jsapi/egw.js @@ -32,6 +32,7 @@ egw_tail; egw_inheritance; egw_message; + egw_notification; app_base; */ diff --git a/api/js/jsapi/egw_notification.js b/api/js/jsapi/egw_notification.js new file mode 100644 index 0000000000..c5e86eb432 --- /dev/null +++ b/api/js/jsapi/egw_notification.js @@ -0,0 +1,81 @@ +/** + * EGroupware clientside API object + * + * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License + * @package etemplate + * @subpackage api + * @link http://www.egroupware.org + * @author Hadi Nategh + * @version $Id: $ + */ + +/*egw:uses + egw_core; +*/ + +/** + * Methods to display browser notification + * + * @augments Class + * @param {string} _app application name object is instanciated for + * @param {object} _wnd window object is instanciated for + */ +egw.extend('notification', egw.MODULE_WND_LOCAL, function(_app, _wnd) +{ + "use strict"; + + // Notification permission, the default value is 'default' which is equivalent to 'denied' + var permission = Notification.permission || 'default'; + + if (Notification && Notification.requestPermission) Notification.requestPermission (function(_permission){ + permission = _permission; + }); + + return { + + /** + * + * @param {string} _title a string to be shown as notification message + * @param {object} _options an object of Notification possible options: + * options = { + * dir: // direction of notification to be shown rtl, ltr or auto + * lang: // a valid BCP 47 language tag + * body: // DOM body + * icon: // parse icon URL, default icon is app icon + * tag: // a string value used for tagging an instance of notification, default is app name + * onclick: // Callback function dispatches on click on notification message + * onshow: // Callback function dispatches when notification is shown + * onclose: // Callback function dispateches on notification close + * onerror: // Callback function dispatches on error, default is a egw.debug log + * } + */ + notification: function (_title, _options) + { + // All options including callbacks + var options = _options || {}; + + // Options used for creating Notification instane + var inst_options = { + tag: options.tag || egw.app_name(), + dir: options.dir || 'ltr', + lang: options.lang || egw.preference('lang', 'common'), + body: options.body || '', + icon: options.icon || egw.image('navbar', egw.app_name()) + }; + + // Create an instance of Notification object + var notification = new Notification(_title, inst_options); + + // Callback function dispatches on click on notification message + notification.onclick = options.onclick || ''; + // Callback function dispatches when notification is shown + notification.onshow = options.onshow || ''; + // Callback function dispateches on notification close + notification.onclose = options.onclose || ''; + // Callback function dispatches on error + notification.onerror = options.onerror || function (e) {egw.debug('Notification failed because of ' + e);}; + + } + + }; +}); \ No newline at end of file