[Pkg-mozext-commits] [firetray] 77/399: options: finished interaction btw. mail server types and accounts

David Prévot taffit at alioth.debian.org
Tue Oct 29 18:23:17 UTC 2013


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

taffit pushed a commit to branch dfsg-clean
in repository firetray.

commit 903f99f0062f96705afe7b9e9ef2296e72ee0924
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Thu Nov 3 01:14:47 2011 +0100

    options: finished interaction btw. mail server types and accounts
---
 src/chrome/content/options.js  |   76 ++++++++++++++++++++++++----------------
 src/chrome/content/options.xul |   22 ++++++------
 src/modules/commons.js         |   55 ++++++++++++++++++++++++++++-
 3 files changed, 110 insertions(+), 43 deletions(-)

diff --git a/src/chrome/content/options.js b/src/chrome/content/options.js
index f71bc69..c16187e 100644
--- a/src/chrome/content/options.js
+++ b/src/chrome/content/options.js
@@ -39,7 +39,9 @@ firetray.UIOptions = {
         function(c) {
           LOG("i: "+i+", cell:"+c);
           c.removeEventListener(
-            'DOMAttrModified', that._userChangeValueTreeAccountsOrServerTypes, true);
+            'DOMAttrModified', that._userChangeValueTreeServerTypes, true);
+          c.removeEventListener(
+            'DOMAttrModified', that._userChangeValueTreeAccounts, true);
         });
     }
   },
@@ -49,20 +51,16 @@ firetray.UIOptions = {
     targetNode.hidden = true;
   },
 
-  _disableGroup: function(group, disableval) {
-    try {
-      for (let i=0; i< group.childNodes.length; i++)
-        group.childNodes[i].disabled = disableval;
-    } catch(e) {
-      ERROR(e);
-    }
-  },
-
-  _disableRow: function(row) {
+  _disableTreeRow: function(row, disable) {
     try {
-      let cells = row.childNodes; //.getElementsByTagName('treecell');
-      for (let i=0; i< cells.length; i++)
-        cells[i].setAttribute('properties', "disabled");
+      let cells = row.childNodes; // .getElementsByTagName('treecell');
+      LOG("CELLS: "+cells);
+      for (let i=0; i< cells.length; i++) {
+        if (disable === true)
+          cells[i].setAttribute('properties', "disabled");
+        else
+          cells[i].removeAttribute('properties');
+      }
     } catch(e) {
       ERROR(e);
     }
@@ -71,13 +69,28 @@ firetray.UIOptions = {
   /**
    * needed for triggering actual preference change and saving
    */
-  _userChangeValueTreeAccountsOrServerTypes: function(event) {
+  _userChangeValueTreeAccounts: function(event) {
     if (event.attrName == "label") LOG("label changed!");
     if (event.attrName == "value") LOG("value changed!");
     document.getElementById("pane1")
       .userChangedValue(document.getElementById("ui_tree_mail_accounts"));
   },
 
+  _userChangeValueTreeServerTypes: function(event) {
+    let checkboxCell = event.originalTarget;
+    let tree = document.getElementById("ui_tree_mail_accounts");
+
+    let rows = firetray.Utils.XPath(
+      checkboxCell,
+      'ancestor::xul:treeitem[1]/descendant::xul:treechildren//xul:treerow');
+    LOG("rows="+rows);
+    for (let i=0; i<rows.length; i++)
+      this._disableTreeRow(rows[i],
+                       (checkboxCell.getAttribute("value") === "false"));
+
+    this._userChangeValueTreeAccounts(event);
+  },
+
   /**
    * NOTE: account exceptions for unread messages count are *stored* in
    * preferences as excluded, but *shown* as "not included"
@@ -106,27 +119,27 @@ firetray.UIOptions = {
       item.appendChild(row);
 
       // account_or_server_type_name
-      let cell = document.createElement('treecell');
-      cell.setAttribute('label',serverTypeName);
-      cell.setAttribute('editable',false);
-      row.appendChild(cell);
+      let cellName = document.createElement('treecell');
+      cellName.setAttribute('label',serverTypeName);
+      cellName.setAttribute('editable',false);
+      row.appendChild(cellName);
 
       // account_or_server_type_excluded => checkbox
-      cell = document.createElement('treecell');
-      cell.setAttribute('value',!serverTypes[serverTypeName].excluded);
-      cell.addEventListener(    // CAUTION: removeEventListener in onQuit()
+      let cellExcluded = document.createElement('treecell');
+      cellExcluded.setAttribute('value',!serverTypes[serverTypeName].excluded);
+      cellExcluded.addEventListener( // CAUTION: removeEventListener in onQuit()
         'DOMAttrModified', function(e) {
-          that._userChangeValueTreeAccountsOrServerTypes(e);
+          that._userChangeValueTreeServerTypes(e);
           firetray.Messaging.updateUnreadMsgCount();
         }, true);
-      row.appendChild(cell);
+      row.appendChild(cellExcluded);
 
       // account_or_server_type_order
-      cell = document.createElement('treecell');
-      cell.setAttribute('label',serverTypes[serverTypeName].order);
-      cell.addEventListener(    // CAUTION: removeEventListener in onQuit()
-        'DOMAttrModified', that._userChangeValueTreeAccountsOrServerTypes, true);
-      row.appendChild(cell);
+      let cellOrder = document.createElement('treecell');
+      cellOrder.setAttribute('label',serverTypes[serverTypeName].order);
+      cellOrder.addEventListener( // CAUTION: removeEventListener in onQuit()
+        'DOMAttrModified', that._userChangeValueTreeServerTypes, true);
+      row.appendChild(cellOrder);
 
       target.appendChild(item);
 
@@ -153,7 +166,7 @@ firetray.UIOptions = {
         cell.setAttribute('value',(accountsExcluded.indexOf(typeAccounts[i].key) < 0));
         cell.addEventListener(    // CAUTION: removeEventListener in onQuit()
           'DOMAttrModified', function(e) {
-            that._userChangeValueTreeAccountsOrServerTypes(e);
+            that._userChangeValueTreeAccounts(e);
             firetray.Messaging.updateUnreadMsgCount();
           }, true);
         subRow.appendChild(cell);
@@ -163,7 +176,8 @@ firetray.UIOptions = {
         cell.setAttribute('editable',false);
         subRow.appendChild(cell);
 
-        // this._disableRow(subRow);
+        this._disableTreeRow(subRow,
+                         (cellExcluded.getAttribute("value") === "false"));
         subItem.appendChild(subRow);
         subChildren.appendChild(subItem);
       }
diff --git a/src/chrome/content/options.xul b/src/chrome/content/options.xul
index 70e1176..c449538 100644
--- a/src/chrome/content/options.xul
+++ b/src/chrome/content/options.xul
@@ -20,24 +20,24 @@
 
     <tabbox>
       <tabs>
-        <!-- <tab label="&general_options;"/> -->
-        <!-- <tab label="&input_options;"/> -->
+        <tab label="&general_options;"/>
+        <tab label="&input_options;"/>
         <tab label="&mail_options;" id="mail_tab" />
       </tabs>
       <tabpanels>
 
-        <!-- <tabpanel id="general_tabpanel">           -->
+        <tabpanel id="general_tabpanel">
 
-        <!--   <groupbox> -->
-        <!--     <checkbox id="ui_close_hides" preference="pref_bool_close_hides" -->
-        <!--               label="&bool_close_hides.label;" -->
-        <!--               accesskey="&bool_close_hides.accesskey;"/> -->
-        <!--   </groupbox> -->
+          <groupbox>
+            <checkbox id="ui_close_hides" preference="pref_bool_close_hides"
+                      label="&bool_close_hides.label;"
+                      accesskey="&bool_close_hides.accesskey;"/>
+          </groupbox>
 
-        <!-- </tabpanel> -->
+        </tabpanel>
 
-        <!-- <tabpanel id="input_tabpanel"> -->
-        <!-- </tabpanel> -->
+        <tabpanel id="input_tabpanel">
+        </tabpanel>
 
         <tabpanel id="mail_tabpanel">
 
diff --git a/src/modules/commons.js b/src/modules/commons.js
index ab4cb3b..2993d66 100644
--- a/src/modules/commons.js
+++ b/src/modules/commons.js
@@ -2,7 +2,8 @@
 
 var EXPORTED_SYMBOLS =
   [ "firetray", "Cc", "Ci", "Cu", "LOG", "WARN", "ERROR",
-    "FIREFOX_ID", "THUNDERBIRD_ID", "SEAMONKEY_ID", "isArray" ];
+    "FIREFOX_ID", "THUNDERBIRD_ID", "SEAMONKEY_ID",
+    "isArray", "XPath" ];
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
@@ -112,6 +113,58 @@ firetray.Utils = {
       }
     }
     LOG(str);
+  },
+
+  _nsResolver: function(prefix) {
+    var ns = {
+      xul: "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+    };
+    return ns[prefix] || null;
+  },
+
+  // adapted from http://code.google.com/p/jslibs/wiki/InternalTipsAndTricks
+  XPath: function(ref, xpath) {
+    var doc = ref.ownerDocument || ref;
+
+    const XPathResult = Ci.nsIDOMXPathResult;
+    try {
+      let that = this;
+      var result = doc.evaluate(xpath, ref, that._nsResolver,
+                                XPathResult.ANY_TYPE, null);
+    } catch (x) {
+      ERROR(x);
+    }
+    LOG("XPathResult="+result.resultType);
+
+    switch (result.resultType) {
+    case XPathResult.NUMBER_TYPE:
+      return result.numberValue;
+    case XPathResult.BOOLEAN_TYPE:
+      return result.booleanValue;
+    case XPathResult.STRING_TYPE:
+      return result.stringValue;
+    } // else XPathResult.UNORDERED_NODE_ITERATOR_TYPE
+
+    var list = [];
+    try {
+      for (let node = result.iterateNext(); node; node = result.iterateNext()) {
+        LOG("node="+node.nodeName);
+        switch (node.nodeType) {
+        case node.ATTRIBUTE_NODE:
+          list.push(node.value);
+          break;
+        case node.TEXT_NODE:
+          list.push(node.data);
+          break;
+        default:
+          list.push(node);
+        }
+      }
+    } catch (x) {
+      ERROR(x);
+    }
+
+    return list;
   }
 
 };

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



More information about the Pkg-mozext-commits mailing list