[Pkg-mozext-commits] [requestpolicy] 20/257: [ref] menu: use `addEventListener` for "click"

David Prévot taffit at moszumanska.debian.org
Thu Jan 28 03:19:52 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository requestpolicy.

commit cd62e82ef995fa93d18f5f53275e19b5c783a62e
Author: Martin Kimmerle <dev at 256k.de>
Date:   Fri Aug 7 21:08:58 2015 +0200

    [ref] menu: use `addEventListener` for "click"
    
    When using `addEventListener()`, the event listener also needs
    to be removed. Therefore the `emptyLists()` function has been
    added. It will be called when
    
    * a list should be repopulated
    * RequestPolicy shuts down -- `addShutdownFunction()`
---
 src/content/ui/menu.js    | 65 +++++++++++++++++++++++++++++++++++++++--------
 src/content/ui/overlay.js |  3 ++-
 2 files changed, 56 insertions(+), 12 deletions(-)

diff --git a/src/content/ui/menu.js b/src/content/ui/menu.js
index d9dbfc7..b16d5d8 100644
--- a/src/content/ui/menu.js
+++ b/src/content/ui/menu.js
@@ -36,6 +36,7 @@ rpcontinued.menu = (function() {
   }());
   // iMod: Alias for ScriptLoader.importModule
   let iMod = ScriptLoader.importModule;
+  let {Environment} = iMod("lib/environment");
   let {Logger} = iMod("lib/logger");
   let {rpPrefBranch, Prefs} = iMod("lib/prefs");
   let {RequestProcessor} = iMod("lib/request-processor");
@@ -95,10 +96,51 @@ rpcontinued.menu = (function() {
 
       var conflictCount = RequestProcessor.getConflictingExtensions().length;
       var hideConflictInfo = (conflictCount == 0);
+
+
+      rpcontinued.overlay.OverlayEnvironment.addShutdownFunction(
+        Environment.LEVELS.INTERFACE,
+        function() {
+          emptyLists([
+            self._otherOriginsList,
+            self._blockedDestinationsList,
+            self._mixedDestinationsList,
+            self._allowedDestinationsList,
+            self._addRulesList,
+            self._removeRulesList
+          ]);
+        });
     }
   };
 
 
+  /**
+   * Removes all children from a list and eventually removes
+   * all event listeners.
+   *
+   * @param {Array<Element>} aLists The lists that should be emptied.
+   */
+  function emptyLists(aLists) {
+    for (let list of aLists) {
+      if (!list) {
+        // skip `null` lists
+        continue;
+      }
+
+      // remove all event listeners
+      {
+        let elements = list.getElementsByClassName("listen-click");
+        for (let el of elements) {
+          el.removeEventListener("click", self.itemSelected, false);
+        }
+      }
+
+      // remove the children
+      DOMUtils.removeChildren(list);
+    }
+  }
+
+
   self.prepareMenu = function() {
     try {
       var disabled = Prefs.isBlockingDisabled();
@@ -185,13 +227,14 @@ rpcontinued.menu = (function() {
     self._originItem.removeAttribute("default-policy");
     self._originItem.removeAttribute("requests-blocked");
 
-    DOMUtils.removeChildren([
-        self._otherOriginsList,
-        self._blockedDestinationsList,
-        self._mixedDestinationsList,
-        self._allowedDestinationsList,
-        self._removeRulesList,
-        self._addRulesList]);
+    emptyLists([
+      self._otherOriginsList,
+      self._blockedDestinationsList,
+      self._mixedDestinationsList,
+      self._allowedDestinationsList,
+      self._removeRulesList,
+      self._addRulesList
+    ]);
     $id('rpc-other-origins').hidden = true;
     $id('rpc-blocked-destinations').hidden = true;
     $id('rpc-mixed-destinations').hidden = true;
@@ -200,7 +243,7 @@ rpcontinued.menu = (function() {
   };
 
   self._populateList = function(list, values) {
-    DOMUtils.removeChildren(list);
+    emptyLists([list]);
 
     // check whether there are objects of GUILocation or just strings
     var guiLocations = values[0] && (values[0] instanceof GUILocation);
@@ -338,7 +381,7 @@ rpcontinued.menu = (function() {
   self._populateDetails = function() {
     var origin = self._currentlySelectedOrigin;
     var dest = self._currentlySelectedDest;
-    DOMUtils.removeChildren([self._removeRulesList, self._addRulesList]);
+    emptyLists([self._removeRulesList, self._addRulesList]);
 
     var ruleData = {
       'o' : {
@@ -445,8 +488,8 @@ rpcontinued.menu = (function() {
 
   self._addListItem = function(list, cssClass, value, numRequests) {
     var hbox = document.createElement("hbox");
-    hbox.setAttribute("class", cssClass);
-    hbox.setAttribute("onclick", 'rpcontinued.menu.itemSelected(event);');
+    hbox.setAttribute("class", cssClass + " listen-click");
+    hbox.addEventListener("click", self.itemSelected, false);
     list.insertBefore(hbox, null);
 
     var destLabel = document.createElement("label");
diff --git a/src/content/ui/overlay.js b/src/content/ui/overlay.js
index 755bf6d..d5e1785 100644
--- a/src/content/ui/overlay.js
+++ b/src/content/ui/overlay.js
@@ -99,7 +99,8 @@ rpcontinued.overlay = (function() {
   let self = {
     // This is set by request-log.js when it is initialized. We don't need to worry
     // about setting it here.
-    requestLog: null
+    requestLog: null,
+    OverlayEnvironment: OverlayEnvironment
   };
 
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/requestpolicy.git



More information about the Pkg-mozext-commits mailing list