Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 /* | 1 /* |
2 * This file is part of Adblock Plus <http://adblockplus.org/>, | 2 * This file is part of Adblock Plus <http://adblockplus.org/>, |
3 * Copyright (C) 2006-2013 Eyeo GmbH | 3 * Copyright (C) 2006-2013 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 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
389 let menuSource = this.overlay["abp-status-popup"]; | 389 let menuSource = this.overlay["abp-status-popup"]; |
390 delete this.overlay["abp-status-popup"]; | 390 delete this.overlay["abp-status-popup"]; |
391 | 391 |
392 if (this.overlay.all.length) | 392 if (this.overlay.all.length) |
393 this.overlay.all[0].appendChild(menuSource); | 393 this.overlay.all[0].appendChild(menuSource); |
394 if ("abp-toolbarbutton" in this.overlay) | 394 if ("abp-toolbarbutton" in this.overlay) |
395 this.overlay["abp-toolbarbutton"].appendChild(fixId(menuSource.cloneNode (true), "abp-toolbar")); | 395 this.overlay["abp-toolbarbutton"].appendChild(fixId(menuSource.cloneNode (true), "abp-toolbar")); |
396 if ("abp-menuitem" in this.overlay) | 396 if ("abp-menuitem" in this.overlay) |
397 this.overlay["abp-menuitem"].appendChild(fixId(menuSource.cloneNode(true ), "abp-menuitem")); | 397 this.overlay["abp-menuitem"].appendChild(fixId(menuSource.cloneNode(true ), "abp-menuitem")); |
398 } | 398 } |
399 }, | |
400 | |
401 _initAntiAdblockNotification: function() | |
402 { | |
403 let notification = { | |
404 id: "antiadblock", | |
405 type: "question", | |
406 title: Utils.getString("notification_antiadblock_title"), | |
407 message: Utils.getString("notification_antiadblock_message"), | |
408 urlFilters: [] | |
409 }; | |
410 | |
411 function notificationListener(approved) | |
412 { | |
413 let subscription = Subscription.fromURL(Prefs.subscriptions_antiadblockurl ); | |
414 if (subscription.url in FilterStorage.knownSubscriptions) | |
415 subscription.disabled = !approved; | |
416 } | |
417 | |
418 function addAntiAdblockNotification(subscription) | |
419 { | |
420 let urlFilters = []; | |
421 for each (let filter in subscription.filters) | |
422 if (filter instanceof ActiveFilter) | |
423 for (let domain in filter.domains) | |
424 if (domain && urlFilters.indexOf(domain) == -1) | |
425 urlFilters.push(domain); | |
426 notification.urlFilters = urlFilters; | |
427 Notification.addNotification(notification); | |
428 Notification.addQuestionListener(notification.id, notificationListener); | |
429 } | |
430 | |
431 function removeAntiAdblockNotification() | |
432 { | |
433 Notification.removeNotification(notification); | |
434 Notification.removeQuestionListener(notification.id, notificationListener) ; | |
435 } | |
436 | |
437 let subscription = Subscription.fromURL(Prefs.subscriptions_antiadblockurl); | |
438 if (subscription.lastDownload && subscription.disabled) | |
439 addAntiAdblockNotification(subscription); | |
440 | |
441 FilterNotifier.addListener(function(action, value, newItem, oldItem) | |
442 { | |
443 if (!/^subscription\.(updated|removed|disabled)$/.test(action) || value.ur l != Prefs.subscriptions_antiadblockurl) | |
444 return; | |
445 | |
446 if (action == "subscription.updated") | |
447 addAntiAdblockNotification(value); | |
448 else if (action == "subscription.removed" || (action == "subscription.disa bled" && !value.disabled)) | |
449 removeAntiAdblockNotification(); | |
450 }); | |
451 | |
452 var documentCreationObserver = { | |
453 observe: function(subject, topic, data) | |
454 { | |
455 if (!(subject instanceof Ci.nsIDOMWindow)) | |
456 return; | |
457 | |
458 this._showNextNotification(subject.location.href); | |
459 }.bind(this) | |
460 }; | |
461 Services.obs.addObserver(documentCreationObserver, "content-document-global- created", false); | |
462 onShutdown.add(function() | |
463 { | |
464 Services.obs.removeObserver(documentCreationObserver, "content-document-gl obal-created", false); | |
465 }); | |
399 }, | 466 }, |
400 | 467 |
401 /** | 468 /** |
402 * Gets called once the initialization is finished and Adblock Plus elements | 469 * Gets called once the initialization is finished and Adblock Plus elements |
403 * can be added to the UI. | 470 * can be added to the UI. |
404 */ | 471 */ |
405 initDone: function() | 472 initDone: function() |
406 { | 473 { |
407 let {WindowObserver} = require("windowObserver"); | 474 let {WindowObserver} = require("windowObserver"); |
408 new WindowObserver(this); | 475 new WindowObserver(this); |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
523 this.updateIconState(window, window.document.getElementById("abp-status")) ; | 590 this.updateIconState(window, window.document.getElementById("abp-status")) ; |
524 this.updateIconState(window, window.document.getElementById("abp-toolbarbu tton")); | 591 this.updateIconState(window, window.document.getElementById("abp-toolbarbu tton")); |
525 }.bind(this)); | 592 }.bind(this)); |
526 addBrowserClickListener(window, this.onBrowserClick.bind(this, window)); | 593 addBrowserClickListener(window, this.onBrowserClick.bind(this, window)); |
527 | 594 |
528 window.document.getElementById("abp-notification-close").addEventListener("c ommand", function(event) | 595 window.document.getElementById("abp-notification-close").addEventListener("c ommand", function(event) |
529 { | 596 { |
530 window.document.getElementById("abp-notification").hidePopup(); | 597 window.document.getElementById("abp-notification").hidePopup(); |
531 }, false); | 598 }, false); |
532 | 599 |
533 // Add "anti-adblock messages" notification | 600 // Add "anti-adblock messages" notification |
Felix Dahlke
2014/02/11 17:57:17
I think all the anti adblock message specific code
Thomas Greiner
2014/02/12 11:58:49
Done.
| |
534 function getURLFiltersFromSubscription(subscription) | 601 this._initAntiAdblockNotification(); |
535 { | |
536 let urlFilters = []; | |
537 for each (let filter in subscription.filters) | |
538 if (filter instanceof ActiveFilter) | |
539 for (let domain in filter.domains) | |
540 if (domain && urlFilters.indexOf(domain) == -1) | |
541 urlFilters.push(domain); | |
542 return urlFilters; | |
543 } | |
544 | |
545 let antiadblockNotification = { | |
546 id: "antiadblock", | |
547 severity: "question", | |
548 title: Utils.getString("notification_antiadblock_title"), | |
549 message: Utils.getString("notification_antiadblock_message"), | |
550 urlFilters: [], | |
551 onApproved: function() | |
Felix Dahlke
2014/02/11 17:57:17
I really don't think we should be able to put code
Thomas Greiner
2014/02/12 11:58:49
You cannot include functions in JSON so they can o
Felix Dahlke
2014/02/12 15:09:27
Oh that's right of course, wouldn't work anyway.
| |
552 { | |
553 let subscription = Subscription.fromURL(Prefs.subscriptions_antiadblocku rl); | |
554 if (subscription.url in FilterStorage.knownSubscriptions) | |
555 subscription.disabled = false; | |
556 }, | |
557 onDeclined: function() | |
558 { | |
559 let subscription = Subscription.fromURL(Prefs.subscriptions_antiadblocku rl); | |
560 if (subscription.url in FilterStorage.knownSubscriptions) | |
561 subscription.disabled = true; | |
562 } | |
563 }; | |
564 let antiadblockSubscription = Subscription.fromURL(Prefs.subscriptions_antia dblockurl); | |
565 if (antiadblockSubscription.lastDownload && antiadblockSubscription.disabled ) | |
566 { | |
567 antiadblockNotification.urlFilters = getURLFiltersFromSubscription(antiadb lockSubscription); | |
568 Notification.addNotification(antiadblockNotification); | |
569 } | |
570 FilterNotifier.addListener(function(action, value, newItem, oldItem) | |
571 { | |
572 if (!/^subscription\.(updated|removed|disabled)$/.test(action) || value.ur l != Prefs.subscriptions_antiadblockurl) | |
573 return; | |
574 | |
575 if (action == "subscription.updated") | |
576 { | |
577 antiadblockNotification.urlFilters = getURLFiltersFromSubscription(value ); | |
Felix Dahlke
2014/02/11 17:57:17
This is repeated above. How about having a createA
Thomas Greiner
2014/02/12 11:58:49
Done.
| |
578 Notification.addNotification(antiadblockNotification); | |
579 } | |
580 else if (action == "subscription.removed" || (action == "subscription.disa bled" && !value.disabled)) | |
581 { | |
582 Notification.removeNotification(antiadblockNotification); | |
583 } | |
584 }); | |
585 | |
586 var httpRequestObserver = { | |
Felix Dahlke
2014/02/11 17:57:17
Shouldn't it be called documentCreatingObserver or
Thomas Greiner
2014/02/12 11:58:49
Done.
| |
587 observe: function(subject, topic, data) | |
588 { | |
589 if (!(subject instanceof Ci.nsIDOMWindow)) | |
590 return; | |
591 | |
592 this._showNextNotification(subject.location.href); | |
593 }.bind(this) | |
594 }; | |
595 Services.obs.addObserver(httpRequestObserver, "content-document-global-creat ed", false); | |
596 onShutdown.add(function() | |
597 { | |
598 Services.obs.removeObserver(httpRequestObserver, "content-document-global- created", false); | |
599 }); | |
600 | 602 |
601 // First-run actions? | 603 // First-run actions? |
602 if (!this.firstRunDone) | 604 if (!this.firstRunDone) |
603 { | 605 { |
604 this.firstRunDone = true; | 606 this.firstRunDone = true; |
605 | 607 |
606 let {addonVersion} = require("info"); | 608 let {addonVersion} = require("info"); |
607 let prevVersion = Prefs.currentVersion; | 609 let prevVersion = Prefs.currentVersion; |
608 if (prevVersion != addonVersion) | 610 if (prevVersion != addonVersion) |
609 { | 611 { |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
836 { | 838 { |
837 subscription.title = "Allow non-intrusive advertising"; | 839 subscription.title = "Allow non-intrusive advertising"; |
838 FilterStorage.addSubscription(subscription); | 840 FilterStorage.addSubscription(subscription); |
839 if (subscription instanceof DownloadableSubscription && !subscription.la stDownload) | 841 if (subscription instanceof DownloadableSubscription && !subscription.la stDownload) |
840 Synchronizer.execute(subscription); | 842 Synchronizer.execute(subscription); |
841 } | 843 } |
842 else | 844 else |
843 addAcceptable = false; | 845 addAcceptable = false; |
844 } | 846 } |
845 | 847 |
846 // Add "anti-adblock messages" subscription for new users and users updating from old ABP versions. | 848 // Add "anti-adblock messages" subscription |
847 if (Services.vc.compare(prevVersion, "2.5") < 0) | 849 let subscription = Subscription.fromURL(Prefs.subscriptions_antiadblockurl); |
Felix Dahlke
2014/02/11 17:57:17
I think we should do this for everyone, no matter
Thomas Greiner
2014/02/12 11:58:49
Done.
| |
848 { | 850 if (subscription) |
849 let subscription = Subscription.fromURL(Prefs.subscriptions_antiadblockurl ); | 851 { |
850 if (subscription) | 852 subscription.disabled = true; |
851 { | 853 FilterStorage.addSubscription(subscription); |
852 subscription.disabled = true; | 854 if (subscription instanceof DownloadableSubscription && !subscription.last Download) |
853 FilterStorage.addSubscription(subscription); | 855 Synchronizer.execute(subscription); |
854 if (subscription instanceof DownloadableSubscription && !subscription.la stDownload) | |
855 Synchronizer.execute(subscription); | |
856 } | |
857 } | 856 } |
858 | 857 |
859 if (!addSubscription && !addAcceptable) | 858 if (!addSubscription && !addAcceptable) |
860 return; | 859 return; |
861 | 860 |
862 function notifyUser() | 861 function notifyUser() |
863 { | 862 { |
864 let {addTab} = require("appSupport"); | 863 let {addTab} = require("appSupport"); |
865 if (addTab) | 864 if (addTab) |
866 { | 865 { |
(...skipping 1036 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1903 let messageElement = window.document.getElementById("abp-notification-messag e"); | 1902 let messageElement = window.document.getElementById("abp-notification-messag e"); |
1904 messageElement.innerHTML = ""; | 1903 messageElement.innerHTML = ""; |
1905 let docLinks = []; | 1904 let docLinks = []; |
1906 for each (let link in notification.links) | 1905 for each (let link in notification.links) |
1907 docLinks.push(Utils.getDocLink(link)); | 1906 docLinks.push(Utils.getDocLink(link)); |
1908 insertMessage(messageElement, texts.message, docLinks); | 1907 insertMessage(messageElement, texts.message, docLinks); |
1909 | 1908 |
1910 messageElement.addEventListener("click", function(event) | 1909 messageElement.addEventListener("click", function(event) |
1911 { | 1910 { |
1912 let link = event.target; | 1911 let link = event.target; |
1913 while (!link || link === messageElement || link.localName !== "a") | 1912 while (link && link !== messageElement && link.localName !== "a") |
Felix Dahlke
2014/02/11 17:57:17
Shouldn't this be an "if"?
Anyway, why aren't we
Thomas Greiner
2014/02/12 11:58:49
Done.
The bubbling lead to the link opening no ma
| |
1913 link = link.parentNode; | |
1914 if (!link || link.localName !== "a") | |
1914 return; | 1915 return; |
1915 event.preventDefault(); | 1916 event.preventDefault(); |
1916 event.stopPropagation(); | 1917 event.stopPropagation(); |
1917 this.loadInBrowser(link.href, window); | 1918 this.loadInBrowser(link.href, window); |
1918 }.bind(this)); | 1919 }.bind(this)); |
1919 | 1920 |
1920 if (notification.severity === "question") | 1921 if (notification.type === "question") |
1921 { | 1922 { |
1922 function buttonHandler(event) | 1923 function buttonHandler(approved, event) |
1923 { | 1924 { |
1924 event.preventDefault(); | 1925 event.preventDefault(); |
1925 event.stopPropagation(); | 1926 event.stopPropagation(); |
1926 panel.hidePopup(); | 1927 panel.hidePopup(); |
1927 | 1928 Notification.triggerQuestionListeners(notification.id, approved) |
1928 let action = notification[event.target.getAttribute("action")]; | |
1929 if (typeof action === "function") | |
1930 action(); | |
1931 Notification.markAsShown(notification.id); | 1929 Notification.markAsShown(notification.id); |
1932 } | 1930 } |
1933 window.document.getElementById("abp-notification-yes").oncommand = buttonH andler; | 1931 window.document.getElementById("abp-notification-yes").onclick = buttonHan dler.bind(null, true); |
1934 window.document.getElementById("abp-notification-no").oncommand = buttonHa ndler; | 1932 window.document.getElementById("abp-notification-no").onclick = buttonHand ler.bind(null, false); |
1935 } | 1933 } |
1936 | 1934 |
1937 panel.setAttribute("class", "abp-" + notification.severity); | 1935 panel.setAttribute("class", "abp-" + notification.type); |
1938 panel.setAttribute("noautohide", notification.severity === "question"); | 1936 panel.setAttribute("noautohide", notification.type === "question"); |
1939 panel.openPopup(button, "bottomcenter topcenter", 0, 0, false, false, null); | 1937 panel.openPopup(button, "bottomcenter topcenter", 0, 0, false, false, null); |
1940 } | 1938 } |
1941 }; | 1939 }; |
1942 UI.onPopupShowing = UI.onPopupShowing.bind(UI); | 1940 UI.onPopupShowing = UI.onPopupShowing.bind(UI); |
1943 UI.onKeyPress = UI.onKeyPress.bind(UI); | 1941 UI.onKeyPress = UI.onKeyPress.bind(UI); |
1944 UI.onIconClick = UI.onIconClick.bind(UI); | 1942 UI.onIconClick = UI.onIconClick.bind(UI); |
1945 UI.init(); | 1943 UI.init(); |
1946 | 1944 |
1947 /** | 1945 /** |
1948 * List of event handers to be registered for each window. For each event | 1946 * List of event handers to be registered for each window. For each event |
(...skipping 16 matching lines...) Expand all Loading... | |
1965 ["abp-command-contribute", "command", UI.openContributePage.bind(UI)], | 1963 ["abp-command-contribute", "command", UI.openContributePage.bind(UI)], |
1966 ["abp-command-contribute-hide", "command", UI.hideContributeButton.bind(UI)] | 1964 ["abp-command-contribute-hide", "command", UI.hideContributeButton.bind(UI)] |
1967 ]; | 1965 ]; |
1968 | 1966 |
1969 onShutdown.add(function() | 1967 onShutdown.add(function() |
1970 { | 1968 { |
1971 for (let window in UI.applicationWindows) | 1969 for (let window in UI.applicationWindows) |
1972 if (UI.isBottombarOpen(window)) | 1970 if (UI.isBottombarOpen(window)) |
1973 UI.toggleBottombar(window); | 1971 UI.toggleBottombar(window); |
1974 }); | 1972 }); |
LEFT | RIGHT |