Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/notificationHelper.js

Issue 29327244: Issue 3024 - Added opt-out to Chrome notifications (Closed)
Patch Set: Centralized button management Created Sept. 11, 2015, 12:36 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « _locales/en_US/messages.json ('k') | options.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/notificationHelper.js
===================================================================
--- a/lib/notificationHelper.js
+++ b/lib/notificationHelper.js
@@ -24,6 +24,7 @@
let {initAntiAdblockNotification} = require("antiadblockInit");
let activeNotification = null;
+let activeButtons = null;
let defaultDisplayMethods = ["popup"];
let displayMethods = Object.create(null);
displayMethods.critical = ["icon", "notification", "popup"];
@@ -63,30 +64,36 @@
{
if (activeNotification.links)
{
- activeNotification.links.forEach(function(link)
- {
- ext.windows.getLastFocused(function(win)
- {
- win.openTab(Utils.getDocLink(link));
- });
- });
+ for (let link of activeNotification.links)
+ ext.pages.open(Utils.getDocLink(link));
}
}
function notificationButtonClick(buttonIndex)
{
- if (activeNotification.type == "question")
+ switch (activeButtons[buttonIndex].type)
{
- NotificationStorage.triggerQuestionListeners(activeNotification.id, buttonIndex == 0);
- NotificationStorage.markAsShown(activeNotification.id);
- activeNotification.onClicked();
- }
- else if (activeNotification.links && activeNotification.links[buttonIndex])
- {
- ext.windows.getLastFocused(function(win)
- {
- win.openTab(Utils.getDocLink(activeNotification.links[buttonIndex]));
- });
+ case "link":
+ ext.pages.open(Utils.getDocLink(activeNotification.links[buttonIndex]));
+ break;
+ case "open-all":
+ openNotificationLinks();
+ break;
+ case "configure":
+ Prefs.notifications_showui = true;
+ ext.showOptions(function(page)
+ {
+ page.sendMessage({
+ type: "focus-section",
+ section: "notifications"
+ });
+ });
+ break;
+ case "question":
+ NotificationStorage.triggerQuestionListeners(activeNotification.id, buttonIndex == 0);
+ NotificationStorage.markAsShown(activeNotification.id);
+ activeNotification.onClicked();
+ break;
}
}
@@ -151,6 +158,7 @@
if (canUseChromeNotifications)
{
+ activeButtons = [];
Sebastian Noack 2015/09/11 13:09:55 This function is becoming quite long. How about mo
Thomas Greiner 2015/09/11 14:03:44 Done. I agree, should make it easier to comprehend
let opts = {
type: "basic",
title: title,
@@ -160,21 +168,55 @@
};
if (activeNotification.type == "question")
{
- opts.buttons.push({title: ext.i18n.getMessage("overlay_notification_button_yes")});
- opts.buttons.push({title: ext.i18n.getMessage("overlay_notification_button_no")});
+ activeButtons.push({
+ type: "question",
+ title: ext.i18n.getMessage("overlay_notification_button_yes")
+ });
+ activeButtons.push({
+ type: "question",
+ title: ext.i18n.getMessage("overlay_notification_button_no")
+ });
}
else
{
let regex = /<a>(.*?)<\/a>/g;
- let plainMessage = texts.message || "";
let match;
- while (match = regex.exec(plainMessage))
- opts.buttons.push({title: match[1]});
+ while (match = regex.exec(texts.message))
+ {
+ activeButtons.push({
+ type: "link",
+ title: match[1]
+ });
+ }
+
+ // Chrome only allows two notification buttons so we need to fall back
+ // to a single button to open all links if there are more than two.
+ let maxButtons = (activeNotification.type == "critical") ? 2 : 1;
+ if (activeButtons.length > maxButtons)
+ {
+ activeButtons = [
+ {
+ type: "open-all",
+ title: ext.i18n.getMessage("notification_open_all")
+ }
+ ];
+ }
+ if (activeNotification.type != "critical")
+ {
+ activeButtons.push({
+ type: "configure",
+ title: ext.i18n.getMessage("notification_configure")
+ });
+ }
}
imgToBase64(iconUrl, function(iconData)
{
- opts["iconUrl"] = iconData;
+ opts.buttons = activeButtons.map(function(button)
Sebastian Noack 2015/09/11 13:09:55 Why not a for-of loop?
Thomas Greiner 2015/09/11 14:03:44 No particular reason. The way I use it now in the
Sebastian Noack 2015/09/11 14:15:39 I see. However, much better with an arrow function
+ {
+ return {title: button.title};
+ });
+ opts.iconUrl = iconData;
chrome.notifications.create("", opts, function() {});
});
}
« no previous file with comments | « _locales/en_US/messages.json ('k') | options.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld