diff --git a/www/common/notifications.js b/www/common/notifications.js index 136117c6f..de9f56a81 100644 --- a/www/common/notifications.js +++ b/www/common/notifications.js @@ -8,11 +8,24 @@ define([ var handlers = {}; + var defaultDismiss = function (common, data) { + return function (e) { + e.preventDefault(); + e.stopPropagation(); + common.mailbox.dismiss(data, function (err) { + if (err) { return void console.error(err); } + }); + }; + }; + // Friend request - handlers['FRIEND_REQUEST'] = function (common, data, el) { + handlers['FRIEND_REQUEST'] = function (common, data) { var content = data.content; var msg = content.msg; + content.handler = function () { + UIElements.displayFriendRequestModal(common, data); + }; // Check authenticity if (msg.author !== msg.content.curvePublic) { return; } @@ -20,56 +33,58 @@ define([ common.addFriendRequest(data); // Display the notification - $(el).find('.cp-notification-content p') - .html(Messages._getKey('friendRequest_notification', [msg.content.displayName || Messages.anonymous])); - $(el).find('.cp-notification-content').addClass("cp-clickable") - .click(function () { - UIElements.displayFriendRequestModal(common, data); - }); + content.getFormatText = function () { + return Messages._getKey('friendRequest_notification', [msg.content.displayName || Messages.anonymous]); + }; }; - handlers['FRIEND_REQUEST_ACCEPTED'] = function (common, data, el) { + handlers['FRIEND_REQUEST_ACCEPTED'] = function (common, data) { var content = data.content; var msg = content.msg; - $(el).find('.cp-notification-content p') - .html(Messages._getKey('friendRequest_accepted', [msg.content.name || Messages.anonymous])); - $(el).find('.cp-notification-dismiss').css('display', 'flex'); + content.dismissHandler = defaultDismiss(common, data); + content.getFormatText = function () { + return Messages._getKey('friendRequest_accepted', [msg.content.name || Messages.anonymous]); + }; }; - handlers['FRIEND_REQUEST_DECLINED'] = function (common, data, el) { + handlers['FRIEND_REQUEST_DECLINED'] = function (common, data) { var content = data.content; var msg = content.msg; - $(el).find('.cp-notification-content p') - .html(Messages._getKey('friendRequest_declined', [msg.content.name || Messages.anonymous])); - $(el).find('.cp-notification-dismiss').css('display', 'flex'); + content.dismissHandler = defaultDismiss(common, data); + content.getFormatText = function () { + return Messages._getKey('friendRequest_declined', [msg.content.name || Messages.anonymous]); + }; }; // Share pad - handlers['SHARE_PAD'] = function (common, data, el) { + handlers['SHARE_PAD'] = function (common, data) { var content = data.content; var msg = content.msg; var type = Hash.parsePadUrl(msg.content.href).type; var key = type === 'drive' ? 'notification_folderShared' : (type === 'file' ? 'notification_fileShared' : - 'notification_padShared'); - $(el).find('.cp-notification-content p') - .html(Messages._getKey(key, [msg.content.name || Messages.anonymous, msg.content.title])); - $(el).find('.cp-notification-content').addClass("cp-clickable") - .click(function () { - common.openURL(msg.content.href); - }); - $(el).find('.cp-notification-dismiss').css('display', 'flex'); + 'notification_padShared'); + content.handler = function () { + common.openURL(msg.content.href); + }; + content.dismissHandler = defaultDismiss(common, data); + content.getFormatText = function () { + return Messages._getKey(key, [msg.content.name || Messages.anonymous, msg.content.title]); + }; }; return { - add: function (common, data, el) { + add: function (common, data) { var type = data.content.msg.type; if (handlers[type]) { - handlers[type](common, data, el); + handlers[type](common, data); + // add getters to access simply some informations + data.content.isClickable = typeof data.content.handler === "function"; + data.content.isDismissible = typeof data.content.dismissHandler === "function"; } else { - $(el).find('.cp-notification-dismiss').css('display', 'flex'); + // $(el).find('.cp-notification-dismiss').css('display', 'flex'); // XXX } }, remove: function (common, data) { diff --git a/www/common/sframe-common-mailbox.js b/www/common/sframe-common-mailbox.js index 4bcee18af..c21af2f16 100644 --- a/www/common/sframe-common-mailbox.js +++ b/www/common/sframe-common-mailbox.js @@ -49,28 +49,28 @@ define([ }; var createElement = function (data) { var notif; - var dismissIcon = h('span.fa.fa-times'); - var dismiss = h('div.cp-notification-dismiss', { - title: Messages.notifications_dismiss - }, dismissIcon); - dismiss.addEventListener('click', function (e) { - e.preventDefault(); - e.stopPropagation(); - mailbox.dismiss(data, function (err) { - if (err) { return void console.error(err); } - /*if (notif && notif.parentNode) { - try { - notif.parentNode.removeChild(notif); - } catch (e) { console.error(e); } - }*/ - }); - }); notif = h('div.cp-notification', { 'data-hash': data.content.hash - }, [ - h('div.cp-notification-content', h('p', formatData(data))), - dismiss - ]); + }, [h('div.cp-notification-content', h('p', formatData(data)))]); + + if (data.content.getFormatText) { + $(notif).find('.cp-notification-content p').html(data.content.getFormatText()); + } + + if (data.content.isClickable) { + $(notif).find('.cp-notification-content').addClass("cp-clickable") + .click(data.content.handler); + } + if (data.content.isDismissible) { + var dismissIcon = h('span.fa.fa-times'); + var dismiss = h('div.cp-notification-dismiss', { + title: Messages.notifications_dismiss + }, dismissIcon); + $(dismiss).css('display', 'flex'); // XXX + $(dismiss).addClass("cp-clickable") + .click(data.content.dismissHandler); + $(notif).append(dismiss); + } return notif; }; @@ -92,8 +92,9 @@ define([ try { var el; if (data.type === 'notifications') { + Notifications.add(Common, data); + console.log(data); el = createElement(data); - Notifications.add(Common, data, el); } f(data, el); } catch (e) { @@ -123,7 +124,6 @@ define([ var onMessage = function (data) { // data = { type: 'type', content: {msg: 'msg', hash: 'hash'} } - console.log(data.content); pushMessage(data); if (!history[data.type]) { history[data.type] = []; } history[data.type].push(data.content);