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

Side by Side Diff: lib/notification.js

Issue 29807560: Issue 6745 - Prefer strict equality operator (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore/
Patch Set: Created June 14, 2018, 4:11 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/matcher.js ('k') | lib/subscriptionClasses.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-present eyeo GmbH 3 * Copyright (C) 2006-present eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 let languagePart = locale.substring(0, locale.indexOf("-")); 63 let languagePart = locale.substring(0, locale.indexOf("-"));
64 if (languagePart && languagePart in translations) 64 if (languagePart && languagePart in translations)
65 return translations[languagePart]; 65 return translations[languagePart];
66 66
67 let defaultLocale = "en-US"; 67 let defaultLocale = "en-US";
68 return translations[defaultLocale]; 68 return translations[defaultLocale];
69 } 69 }
70 70
71 function parseVersionComponent(comp) 71 function parseVersionComponent(comp)
72 { 72 {
73 if (comp == "*") 73 if (comp === "*")
74 return Infinity; 74 return Infinity;
75 return parseInt(comp, 10) || 0; 75 return parseInt(comp, 10) || 0;
76 } 76 }
77 77
78 function compareVersion(v1, v2) 78 function compareVersion(v1, v2)
79 { 79 {
80 let regexp = /^(.*?)([a-z].*)?$/i; 80 let regexp = /^(.*?)([a-z].*)?$/i;
81 let [, head1, tail1] = regexp.exec(v1); 81 let [, head1, tail1] = regexp.exec(v1);
82 let [, head2, tail2] = regexp.exec(v2); 82 let [, head2, tail2] = regexp.exec(v2);
83 let components1 = head1.split("."); 83 let components1 = head1.split(".");
84 let components2 = head2.split("."); 84 let components2 = head2.split(".");
85 85
86 for (let i = 0; i < components1.length || 86 for (let i = 0; i < components1.length ||
87 i < components2.length; i++) 87 i < components2.length; i++)
88 { 88 {
89 let result = parseVersionComponent(components1[i]) - 89 let result = parseVersionComponent(components1[i]) -
90 parseVersionComponent(components2[i]) || 0; 90 parseVersionComponent(components2[i]) || 0;
91 91
92 if (result != 0) 92 if (result !== 0)
93 return result; 93 return result;
94 } 94 }
95 95
96 // Compare version suffix (e.g. 0.1alpha < 0.1b1 < 01.b2 < 0.1). 96 // Compare version suffix (e.g. 0.1alpha < 0.1b1 < 01.b2 < 0.1).
97 // However, note that this is a simple string comparision, meaning: b10 < b2 97 // However, note that this is a simple string comparision, meaning: b10 < b2
98 if (tail1 == tail2) 98 if (tail1 == tail2)
99 return 0; 99 return 0;
100 if (!tail1 || tail2 && tail1 > tail2) 100 if (!tail1 || tail2 && tail1 > tail2)
101 return 1; 101 return 1;
102 return -1; 102 return -1;
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 saveNotificationData(); 204 saveNotificationData();
205 }, 205 },
206 206
207 /** 207 /**
208 * Adds a listener for notifications to be shown. 208 * Adds a listener for notifications to be shown.
209 * @param {Function} listener Listener to be invoked when a notification is 209 * @param {Function} listener Listener to be invoked when a notification is
210 * to be shown 210 * to be shown
211 */ 211 */
212 addShowListener(listener) 212 addShowListener(listener)
213 { 213 {
214 if (showListeners.indexOf(listener) == -1) 214 if (showListeners.indexOf(listener) === -1)
215 showListeners.push(listener); 215 showListeners.push(listener);
216 }, 216 },
217 217
218 /** 218 /**
219 * Removes the supplied listener. 219 * Removes the supplied listener.
220 * @param {Function} listener Listener that was added via addShowListener() 220 * @param {Function} listener Listener that was added via addShowListener()
221 */ 221 */
222 removeShowListener(listener) 222 removeShowListener(listener)
223 { 223 {
224 let index = showListeners.indexOf(listener); 224 let index = showListeners.indexOf(listener);
225 if (index != -1) 225 if (index !== -1)
226 showListeners.splice(index, 1); 226 showListeners.splice(index, 1);
227 }, 227 },
228 228
229 /** 229 /**
230 * Determines which notification is to be shown next. 230 * Determines which notification is to be shown next.
231 * @param {string} url URL to match notifications to (optional) 231 * @param {string} url URL to match notifications to (optional)
232 * @return {Object} notification to be shown, or null if there is none 232 * @return {Object} notification to be shown, or null if there is none
233 */ 233 */
234 _getNextToShow(url) 234 _getNextToShow(url)
235 { 235 {
236 let remoteData = []; 236 let remoteData = [];
237 if (typeof Prefs.notificationdata.data == "object" && 237 if (typeof Prefs.notificationdata.data === "object" &&
238 Prefs.notificationdata.data.notifications instanceof Array) 238 Prefs.notificationdata.data.notifications instanceof Array)
239 { 239 {
240 remoteData = Prefs.notificationdata.data.notifications; 240 remoteData = Prefs.notificationdata.data.notifications;
241 } 241 }
242 242
243 let notifications = localData.concat(remoteData); 243 let notifications = localData.concat(remoteData);
244 if (notifications.length === 0) 244 if (notifications.length === 0)
245 return null; 245 return null;
246 246
247 const {addonName, addonVersion, application, 247 const {addonName, addonVersion, application,
248 applicationVersion, platform, platformVersion} = require("info"); 248 applicationVersion, platform, platformVersion} = require("info");
249 249
250 let targetChecks = { 250 let targetChecks = {
251 extension: v => v == addonName, 251 extension: v => v === addonName,
252 extensionMinVersion: 252 extensionMinVersion:
253 v => compareVersion(addonVersion, v) >= 0, 253 v => compareVersion(addonVersion, v) >= 0,
254 extensionMaxVersion: 254 extensionMaxVersion:
255 v => compareVersion(addonVersion, v) <= 0, 255 v => compareVersion(addonVersion, v) <= 0,
256 application: v => v == application, 256 application: v => v === application,
257 applicationMinVersion: 257 applicationMinVersion:
258 v => compareVersion(applicationVersion, v) >= 0, 258 v => compareVersion(applicationVersion, v) >= 0,
259 applicationMaxVersion: 259 applicationMaxVersion:
260 v => compareVersion(applicationVersion, v) <= 0, 260 v => compareVersion(applicationVersion, v) <= 0,
261 platform: v => v == platform, 261 platform: v => v === platform,
262 platformMinVersion: 262 platformMinVersion:
263 v => compareVersion(platformVersion, v) >= 0, 263 v => compareVersion(platformVersion, v) >= 0,
264 platformMaxVersion: 264 platformMaxVersion:
265 v => compareVersion(platformVersion, v) <= 0, 265 v => compareVersion(platformVersion, v) <= 0,
266 blockedTotalMin: v => Prefs.show_statsinpopup && 266 blockedTotalMin: v => Prefs.show_statsinpopup &&
267 Prefs.blocked_total >= v, 267 Prefs.blocked_total >= v,
268 blockedTotalMax: v => Prefs.show_statsinpopup && 268 blockedTotalMax: v => Prefs.show_statsinpopup &&
269 Prefs.blocked_total <= v, 269 Prefs.blocked_total <= v,
270 locales: v => v.includes(Utils.appLocale) 270 locales: v => v.includes(Utils.appLocale)
271 }; 271 };
272 272
273 let notificationToShow = null; 273 let notificationToShow = null;
274 for (let notification of notifications) 274 for (let notification of notifications)
275 { 275 {
276 if (typeof notification.type === "undefined" || 276 if (typeof notification.type === "undefined" ||
277 notification.type !== "critical") 277 notification.type !== "critical")
278 { 278 {
279 let shown; 279 let shown;
280 if (typeof Prefs.notificationdata.shown == "object") 280 if (typeof Prefs.notificationdata.shown === "object")
281 shown = Prefs.notificationdata.shown[notification.id]; 281 shown = Prefs.notificationdata.shown[notification.id];
282 282
283 if (typeof shown != "undefined") 283 if (typeof shown !== "undefined")
284 { 284 {
285 if (typeof notification.interval == "number") 285 if (typeof notification.interval === "number")
286 { 286 {
287 if (shown + notification.interval > Date.now()) 287 if (shown + notification.interval > Date.now())
288 continue; 288 continue;
289 } 289 }
290 else if (shown) 290 else if (shown)
291 continue; 291 continue;
292 } 292 }
293 293
294 if (notification.type !== "relentless" && 294 if (notification.type !== "relentless" &&
295 Prefs.notifications_ignoredcategories.indexOf("*") != -1) 295 Prefs.notifications_ignoredcategories.indexOf("*") !== -1)
296 { 296 {
297 continue; 297 continue;
298 } 298 }
299 } 299 }
300 300
301 if (typeof url === "string" || notification.urlFilters instanceof Array) 301 if (typeof url === "string" || notification.urlFilters instanceof Array)
302 { 302 {
303 if (Prefs.enabled && typeof url === "string" && 303 if (Prefs.enabled && typeof url === "string" &&
304 notification.urlFilters instanceof Array) 304 notification.urlFilters instanceof Array)
305 { 305 {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 let data = Prefs.notificationdata; 386 let data = Prefs.notificationdata;
387 387
388 if (data.shown instanceof Array) 388 if (data.shown instanceof Array)
389 { 389 {
390 let newShown = {}; 390 let newShown = {};
391 for (let oldId of data.shown) 391 for (let oldId of data.shown)
392 newShown[oldId] = now; 392 newShown[oldId] = now;
393 data.shown = newShown; 393 data.shown = newShown;
394 } 394 }
395 395
396 if (typeof data.shown != "object") 396 if (typeof data.shown !== "object")
397 data.shown = {}; 397 data.shown = {};
398 398
399 data.shown[id] = now; 399 data.shown[id] = now;
400 400
401 saveNotificationData(); 401 saveNotificationData();
402 }, 402 },
403 403
404 /** 404 /**
405 * Localizes the texts of the supplied notification. 405 * Localizes the texts of the supplied notification.
406 * @param {Object} notification notification to translate 406 * @param {Object} notification notification to translate
407 * @return {Object} the translated texts 407 * @return {Object} the translated texts
408 */ 408 */
409 getLocalizedTexts(notification) 409 getLocalizedTexts(notification)
410 { 410 {
411 let textKeys = ["title", "message"]; 411 let textKeys = ["title", "message"];
412 let localizedTexts = {}; 412 let localizedTexts = {};
413 for (let key of textKeys) 413 for (let key of textKeys)
414 { 414 {
415 if (key in notification) 415 if (key in notification)
416 { 416 {
417 if (typeof notification[key] == "string") 417 if (typeof notification[key] === "string")
418 localizedTexts[key] = notification[key]; 418 localizedTexts[key] = notification[key];
419 else 419 else
420 localizedTexts[key] = localize(notification[key], Utils.appLocale); 420 localizedTexts[key] = localize(notification[key], Utils.appLocale);
421 } 421 }
422 } 422 }
423 return localizedTexts; 423 return localizedTexts;
424 }, 424 },
425 425
426 /** 426 /**
427 * Adds a local notification. 427 * Adds a local notification.
428 * @param {Object} notification notification to add 428 * @param {Object} notification notification to add
429 */ 429 */
430 addNotification(notification) 430 addNotification(notification)
431 { 431 {
432 if (localData.indexOf(notification) == -1) 432 if (localData.indexOf(notification) === -1)
433 localData.push(notification); 433 localData.push(notification);
434 }, 434 },
435 435
436 /** 436 /**
437 * Removes an existing local notification. 437 * Removes an existing local notification.
438 * @param {Object} notification notification to remove 438 * @param {Object} notification notification to remove
439 */ 439 */
440 removeNotification(notification) 440 removeNotification(notification)
441 { 441 {
442 let index = localData.indexOf(notification); 442 let index = localData.indexOf(notification);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 496
497 /** 497 /**
498 * Toggles whether notifications of a specific category should be ignored 498 * Toggles whether notifications of a specific category should be ignored
499 * @param {string} category notification category identifier 499 * @param {string} category notification category identifier
500 * @param {boolean} [forceValue] force specified value 500 * @param {boolean} [forceValue] force specified value
501 */ 501 */
502 toggleIgnoreCategory(category, forceValue) 502 toggleIgnoreCategory(category, forceValue)
503 { 503 {
504 let categories = Prefs.notifications_ignoredcategories; 504 let categories = Prefs.notifications_ignoredcategories;
505 let index = categories.indexOf(category); 505 let index = categories.indexOf(category);
506 if (index == -1 && forceValue !== false) 506 if (index === -1 && forceValue !== false)
507 { 507 {
508 categories.push(category); 508 categories.push(category);
509 Prefs.notifications_showui = true; 509 Prefs.notifications_showui = true;
510 } 510 }
511 else if (index != -1 && forceValue !== true) 511 else if (index !== -1 && forceValue !== true)
512 categories.splice(index, 1); 512 categories.splice(index, 1);
513 513
514 // HACK: JSON values aren't saved unless they are assigned a 514 // HACK: JSON values aren't saved unless they are assigned a
515 // different object. 515 // different object.
516 Prefs.notifications_ignoredcategories = 516 Prefs.notifications_ignoredcategories =
517 JSON.parse(JSON.stringify(categories)); 517 JSON.parse(JSON.stringify(categories));
518 } 518 }
519 }; 519 };
520 Notification.init(); 520 Notification.init();
OLDNEW
« no previous file with comments | « lib/matcher.js ('k') | lib/subscriptionClasses.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld