This is just some static backup of the original site, don't expect every link to work!

Ignore:
Timestamp:
Nov 3, 2014, 12:35:40 PM (8 years ago)
Author:
rene <rene@…>
Branches:
ng_0.9
Children:
7204cb
Parents:
3c9c29
Message:

code formatting (no code changes)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • content/vI_rdfDataTree.js

    r3c9c29 r509348  
    3030
    3131Components.utils.import("resource://v_identity/vI_nameSpaceWrapper.js");
    32 virtualIdentityExtension.ns(function() { with (virtualIdentityExtension.LIB) {
    33 
    34 let Log = vI.setupLogging("virtualIdentity.rdfDataTree");
    35 
    36 Components.utils.import("resource://v_identity/vI_identityData.js", virtualIdentityExtension);
    37 Components.utils.import("resource://v_identity/vI_rdfDatasource.js", virtualIdentityExtension);
    38 Components.utils.import("resource://v_identity/vI_prefs.js", virtualIdentityExtension);
    39 
    40 //prepares an object for easy comparison against another. for strings, lowercases them
    41 var prepareForComparison = function(element, field) {
    42     if (field == "changedCol") {
     32virtualIdentityExtension.ns(function () {
     33  with(virtualIdentityExtension.LIB) {
     34
     35    let Log = vI.setupLogging("virtualIdentity.rdfDataTree");
     36
     37    Components.utils.import("resource://v_identity/vI_identityData.js", virtualIdentityExtension);
     38    Components.utils.import("resource://v_identity/vI_rdfDatasource.js", virtualIdentityExtension);
     39    Components.utils.import("resource://v_identity/vI_prefs.js", virtualIdentityExtension);
     40
     41    //prepares an object for easy comparison against another. for strings, lowercases them
     42    var prepareForComparison = function (element, field) {
     43      if (field == "changedCol") {
    4344        field = "changed"
    44     }
    45     if (field == "usedCol") {
     45      }
     46      if (field == "usedCol") {
    4647        field = "used"
    47     }
    48     var o = element[field];
    49     if (typeof o == "string") { return o.toLowerCase().replace(/\"/g,""); }
    50     return "";
    51 };
    52 
    53 
    54 var rdfDataTree = function(treeType, rdfDatasource) {
    55     this.treeType = treeType;
    56     this._rdfDatasource = rdfDatasource;
    57     this.filterText = "";
    58     this.loadTable();
    59 };
    60 
    61 rdfDataTree.prototype = {
    62     idTable : null,
    63     idData : null,
    64     filterText : null,
    65     treeType : null,
    66     _rdfDatasource : null,
    67 
    68     get treeElem() { return document.getElementById("rdfDataTree_" + this.treeType); },
    69     get tabElem() { return document.getElementById(this.treeType + "Tab"); },
    70    
    71     //this function is called every time the tree is sorted, filtered, or reloaded
    72     loadTable : function() {
    73 //         Log.debug("loadTable.");
    74         //remember scroll position. this is useful if this is an editable table
    75         //to prevent the user from losing the row they edited
    76         var topVisibleRow = null;
    77         if (this.idTable)
     48      }
     49      var o = element[field];
     50      if (typeof o == "string") {
     51        return o.toLowerCase().replace(/\"/g, "");
     52      }
     53      return "";
     54    };
     55
     56
     57    var rdfDataTree = function (treeType, rdfDatasource) {
     58      this.treeType = treeType;
     59      this._rdfDatasource = rdfDatasource;
     60      this.filterText = "";
     61      this.loadTable();
     62    };
     63
     64    rdfDataTree.prototype = {
     65      idTable: null,
     66      idData: null,
     67      filterText: null,
     68      treeType: null,
     69      _rdfDatasource: null,
     70
     71      get treeElem() {
     72        return document.getElementById("rdfDataTree_" + this.treeType);
     73      },
     74      get tabElem() {
     75        return document.getElementById(this.treeType + "Tab");
     76      },
     77
     78      //this function is called every time the tree is sorted, filtered, or reloaded
     79      loadTable: function () {
     80        //         Log.debug("loadTable.");
     81        //remember scroll position. this is useful if this is an editable table
     82        //to prevent the user from losing the row they edited
     83        var topVisibleRow = null;
     84        if (this.idTable)
    7885          topVisibleRow = this.treeElem.treeBoxObject.getFirstVisibleRow();
    79         if (this.idData == null) {
    80             this.idData = [];
    81             this._rdfDatasource.readAllEntriesFromRDF(this.addNewDatum, this.treeType, this.idData);
    82         }
    83         if (this.filterText == "") {
    84             //show all of them
    85             this.idTable = this.idData;
    86         } else {
    87             //filter out the ones we want to display
    88             var curTable = [];
    89             var curFilterText = this.filterText;
    90             this.idData.forEach(function(element) {
    91                 //we'll match on every property
    92                 for (var i in element) {
    93                     if (prepareForComparison(element, i).indexOf(curFilterText) != -1) {
    94                         curTable.push(element);
    95                         break;
    96                     }
    97                 }
    98             });
    99             this.idTable = curTable;
    100         }   
    101        
    102         this.sort();
    103        
    104         //restore scroll position
    105         if (topVisibleRow && topVisibleRow <= this.idTable.length) {
    106             this.treeElem.treeBoxObject.scrollToRow(topVisibleRow);
    107         }
    108 
    109         // set Tab label
    110         this.tabElem.setAttribute("label", this.treeType + " (" + this.idTable.length + ")");
    111 //         Log.debug("loadTable done.");
    112     },
    113 
    114     addNewDatum : function(resource, name, localIdentityData, idData, used, changed) {
    115         var usedDate = "", changedDate = "";
     86        if (this.idData == null) {
     87          this.idData = [];
     88          this._rdfDatasource.readAllEntriesFromRDF(this.addNewDatum, this.treeType, this.idData);
     89        }
     90        if (this.filterText == "") {
     91          //show all of them
     92          this.idTable = this.idData;
     93        } else {
     94          //filter out the ones we want to display
     95          var curTable = [];
     96          var curFilterText = this.filterText;
     97          this.idData.forEach(function (element) {
     98            //we'll match on every property
     99            for (var i in element) {
     100              if (prepareForComparison(element, i).indexOf(curFilterText) != -1) {
     101                curTable.push(element);
     102                break;
     103              }
     104            }
     105          });
     106          this.idTable = curTable;
     107        }
     108
     109        this.sort();
     110
     111        //restore scroll position
     112        if (topVisibleRow && topVisibleRow <= this.idTable.length) {
     113          this.treeElem.treeBoxObject.scrollToRow(topVisibleRow);
     114        }
     115
     116        // set Tab label
     117        this.tabElem.setAttribute("label", this.treeType + " (" + this.idTable.length + ")");
     118        //         Log.debug("loadTable done.");
     119      },
     120
     121      addNewDatum: function (resource, name, localIdentityData, idData, used, changed) {
     122        var usedDate = "",
     123          changedDate = "";
    116124        var format = vI.prefroot.getCharPref("extensions.virtualIdentity.storage_timeFormat")
    117125        if (format != "") {
    118             if (used) usedDate = new Date(parseFloat(used)).toLocaleFormat(format);
    119             if (changed) changedDate = new Date(parseFloat(changed)).toLocaleFormat(format);
     126          if (used) usedDate = new Date(parseFloat(used)).toLocaleFormat(format);
     127          if (changed) changedDate = new Date(parseFloat(changed)).toLocaleFormat(format);
    120128        } else {
    121             if (used) usedDate = new Date(parseFloat(used)).toLocaleString();
    122             if (changed) changedDate = new Date(parseFloat(changed)).toLocaleString();
    123         }
    124         var pref = {    recipientCol : name,
    125                 indexCol : idData.length + 1 + ".",
    126                 senderCol : localIdentityData.combinedName,
    127                 smtpCol : localIdentityData.smtp.value,
    128 //              smtpKey : localIdentityData.smtp.key,
    129                 idCol : localIdentityData.id.value,
    130                 usedCol : usedDate,
    131                 used : used,
    132                 changedCol : changedDate,
    133                 changed : changed,
    134 //              idKey : localIdentityData.id.key,
    135                 resource : resource,
    136                 identityData : localIdentityData}
    137 //      Log.debug("addNewDatum.");
    138         localIdentityData.extras.addPrefs(pref);
    139         idData.push(pref);
    140     },
    141     sort : function(columnName) {
    142 //      Log.debug("sort: " + columnName);
    143         var order = this.treeElem.getAttribute("sortDirection") == "ascending" ? 1 : -1;
    144         // if the column is passed and it's already sorted by that column, reverse sort
    145         if (columnName && (this.treeElem.getAttribute("sortResource") == columnName)) {
    146                 order *= -1;
    147         }
    148        
    149         function columnSort(a, b) {
     129          if (used) usedDate = new Date(parseFloat(used)).toLocaleString();
     130          if (changed) changedDate = new Date(parseFloat(changed)).toLocaleString();
     131        }
     132        var pref = {
     133            recipientCol: name,
     134            indexCol: idData.length + 1 + ".",
     135            senderCol: localIdentityData.combinedName,
     136            smtpCol: localIdentityData.smtp.value,
     137            //              smtpKey : localIdentityData.smtp.key,
     138            idCol: localIdentityData.id.value,
     139            usedCol: usedDate,
     140            used: used,
     141            changedCol: changedDate,
     142            changed: changed,
     143            //              idKey : localIdentityData.id.key,
     144            resource: resource,
     145            identityData: localIdentityData
     146          }
     147          //        Log.debug("addNewDatum.");
     148        localIdentityData.extras.addPrefs(pref);
     149        idData.push(pref);
     150      },
     151      sort: function (columnName) {
     152        //      Log.debug("sort: " + columnName);
     153        var order = this.treeElem.getAttribute("sortDirection") == "ascending" ? 1 : -1;
     154        // if the column is passed and it's already sorted by that column, reverse sort
     155        if (columnName && (this.treeElem.getAttribute("sortResource") == columnName)) {
     156          order *= -1;
     157        }
     158
     159        function columnSort(a, b) {
    150160          try {
    151             if (prepareForComparison(a, columnName) >
    152                 prepareForComparison(b, columnName)) return 1 * order;
    153             if (prepareForComparison(a, columnName) <
    154                 prepareForComparison(b, columnName)) return -1 * order;
    155           } catch(e) {};
    156             return 0;
    157         }
    158        
    159         if (!columnName)
     161            if (prepareForComparison(a, columnName) >
     162              prepareForComparison(b, columnName)) return 1 * order;
     163            if (prepareForComparison(a, columnName) <
     164              prepareForComparison(b, columnName)) return -1 * order;
     165          } catch (e) {};
     166          return 0;
     167        }
     168
     169        if (!columnName)
    160170          columnName = this.treeElem.getAttribute("sortResource")
    161        
     171
    162172        this.idTable.sort(columnSort);
    163        
    164         //setting these will make the sort option persist
    165         this.treeElem.setAttribute("sortDirection", order == 1 ? "ascending" : "descending");
    166         this.treeElem.setAttribute("sortResource", columnName);
    167        
    168         this.treeElem.view = new rdfDataTreeCollection.treeView(this.idTable);
    169        
    170         //set the appropriate attributes to show to indicator
    171         var cols = this.treeElem.getElementsByTagName("treecol");
    172         for (var i = 0; i < cols.length; i++) {
    173             cols[i].removeAttribute("sortDirection");
    174             if (cols[i].id.match(columnName))
    175                 cols[i].setAttribute("sortDirection", order == 1 ? "ascending" : "descending");
    176         }
    177     }
    178 };
    179 
    180 var rdfDataTreeCollection = {
    181     promptService : Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
    182             .getService(Components.interfaces.nsIPromptService),
    183 
    184     treeTypes : Array("email", "maillist", "newsgroup", "filter"),
    185 
    186     trees : {},
    187     tabbox : null,
    188    
    189     _strings : null,
    190     _rdfDatasource : null,
    191    
    192     onTabSelect : function () {
    193         rdfDataTreeCollection.hideInfoBox();
    194         if (rdfDataTreeCollection.tabbox) {
    195             rdfDataTreeCollection.moveConstraints();
    196             rdfDataTreeCollection.updateButtonMenu();
    197         }
    198     },
    199    
    200     onselect : function () {
    201         rdfDataTreeCollection.moveConstraints();
    202         rdfDataTreeCollection.updateButtonMenu();
    203 
    204         var tree = rdfDataTreeCollection.trees[rdfDataTreeCollection.tabbox.selectedPanel.id];
    205         var htmlBox = document.getElementById("rdfDataTreeCollectionInfoBox")
    206         if (tree.treeElem.view.selection.count != 1)
    207             { rdfDataTreeCollection.hideInfoBox(); return; }
    208        
    209         var identityData = tree.idTable[tree.treeElem.currentIndex]["identityData"];
    210         var _identityInfo =
    211             "<div id='recipientLabel'>" +
    212                 tree.idTable[tree.treeElem.currentIndex]["recipientCol"].replace(/>/g,"&gt;").replace(/</g,"&lt;") +
    213             "</div><div id='vICard'>" +
    214             "<table><tr>" +
    215                 "<td class='image'><img src='chrome://v_identity/skin/vi-info.png' /></td>" +
    216                 "<td class='identityTable'>" +
    217                     "<div class='name'>" + identityData.combinedNameHtml + "</div>" +   
    218                     "<table><tbody>" + identityData.getMatrix() + "</tbody></table>" +
    219                 "</td>" +
    220             "</tr></table></div>"
    221 
    222         htmlBox.outputString = _identityInfo;
    223         rdfDataTreeCollection.infoBoxHidden = false;
    224         htmlBox.setAttribute("style", "height:" + htmlBox.contentDocument.lastChild.scrollHeight +"px");
    225         rdfDataTreeCollection.overflow(); // better resize one time too much, mozilla is still magic  :)
    226     },
    227 
    228     init : function() {
    229         rdfDataTreeCollection.tabbox = document.getElementById("TreeTabbox");
    230         rdfDataTreeCollection._strings = Components.classes["@mozilla.org/intl/stringbundle;1"]
     173
     174        //setting these will make the sort option persist
     175        this.treeElem.setAttribute("sortDirection", order == 1 ? "ascending" : "descending");
     176        this.treeElem.setAttribute("sortResource", columnName);
     177
     178        this.treeElem.view = new rdfDataTreeCollection.treeView(this.idTable);
     179
     180        //set the appropriate attributes to show to indicator
     181        var cols = this.treeElem.getElementsByTagName("treecol");
     182        for (var i = 0; i < cols.length; i++) {
     183          cols[i].removeAttribute("sortDirection");
     184          if (cols[i].id.match(columnName))
     185            cols[i].setAttribute("sortDirection", order == 1 ? "ascending" : "descending");
     186        }
     187      }
     188    };
     189
     190    var rdfDataTreeCollection = {
     191      promptService: Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
     192        .getService(Components.interfaces.nsIPromptService),
     193
     194      treeTypes: Array("email", "maillist", "newsgroup", "filter"),
     195
     196      trees: {},
     197      tabbox: null,
     198
     199      _strings: null,
     200      _rdfDatasource: null,
     201
     202      onTabSelect: function () {
     203        rdfDataTreeCollection.hideInfoBox();
     204        if (rdfDataTreeCollection.tabbox) {
     205          rdfDataTreeCollection.moveConstraints();
     206          rdfDataTreeCollection.updateButtonMenu();
     207        }
     208      },
     209
     210      onselect: function () {
     211        rdfDataTreeCollection.moveConstraints();
     212        rdfDataTreeCollection.updateButtonMenu();
     213
     214        var tree = rdfDataTreeCollection.trees[rdfDataTreeCollection.tabbox.selectedPanel.id];
     215        var htmlBox = document.getElementById("rdfDataTreeCollectionInfoBox")
     216        if (tree.treeElem.view.selection.count != 1) {
     217          rdfDataTreeCollection.hideInfoBox();
     218          return;
     219        }
     220
     221        var identityData = tree.idTable[tree.treeElem.currentIndex]["identityData"];
     222        var _identityInfo =
     223          "<div id='recipientLabel'>" +
     224          tree.idTable[tree.treeElem.currentIndex]["recipientCol"].replace(/>/g, "&gt;").replace(/</g, "&lt;") +
     225          "</div><div id='vICard'>" +
     226          "<table><tr>" +
     227          "<td class='image'><img src='chrome://v_identity/skin/vi-info.png' /></td>" +
     228          "<td class='identityTable'>" +
     229          "<div class='name'>" + identityData.combinedNameHtml + "</div>" +
     230          "<table><tbody>" + identityData.getMatrix() + "</tbody></table>" +
     231          "</td>" +
     232          "</tr></table></div>"
     233
     234        htmlBox.outputString = _identityInfo;
     235        rdfDataTreeCollection.infoBoxHidden = false;
     236        htmlBox.setAttribute("style", "height:" + htmlBox.contentDocument.lastChild.scrollHeight + "px");
     237        rdfDataTreeCollection.overflow(); // better resize one time too much, mozilla is still magic  :)
     238      },
     239
     240      init: function () {
     241        rdfDataTreeCollection.tabbox = document.getElementById("TreeTabbox");
     242        rdfDataTreeCollection._strings = Components.classes["@mozilla.org/intl/stringbundle;1"]
    231243          .getService(Components.interfaces.nsIStringBundleService)
    232244          .createBundle("chrome://v_identity/locale/vI_rdfDataEditor.properties");
    233245
    234         rdfDataTreeCollection._rdfDatasource = new vI.rdfDatasource("virtualIdentity.rdf");
    235        
    236         for each (var treeType in rdfDataTreeCollection.treeTypes)
    237             rdfDataTreeCollection.trees[treeType] = new rdfDataTree(treeType, rdfDataTreeCollection._rdfDatasource);
    238     },
    239    
    240     clean : function() {
     246        rdfDataTreeCollection._rdfDatasource = new vI.rdfDatasource("virtualIdentity.rdf");
     247
     248        for each(var treeType in rdfDataTreeCollection.treeTypes)
     249        rdfDataTreeCollection.trees[treeType] = new rdfDataTree(treeType, rdfDataTreeCollection._rdfDatasource);
     250      },
     251
     252      clean: function () {
    241253        if (rdfDataTreeCollection._rdfDatasource) rdfDataTreeCollection._rdfDatasource.clean();
    242     },
    243 
    244     get _braille() {
    245         var braille = false;
    246         try {   braille = (vI.prefroot.getCharPref("accessibility.usebrailledisplay") ||
    247                 vI.prefroot.getCharPref("accessibility.usetexttospeech")); }
    248         catch (e) { };
    249         return braille;
    250     },
    251 
    252     // generic custom tree view stuff
    253     treeView : function (table) {
    254         this.rowCount = table.length;
    255         this.getCellText = function(row, col) {
    256             var retValue = table[row][col.id.substr(0,col.id.indexOf("_"))];
    257             if (!rdfDataTreeCollection._braille && (retValue == "no" || retValue == "yes"))
    258                 return ""; // image will be used as indicator
    259             else return retValue;
    260         };
    261         this.getCellValue = function(row, col) {
    262             return this.getCellText(row, col);
    263         };
    264         this.setTree = function(treebox) {
    265             this.treebox = treebox;
    266         };
    267         this.isEditable = function(row, col) {
    268             return col.editable;
    269         };
    270         this.isContainer = function(row){ return false; };
    271         this.isSeparator = function(row){ return false; };
    272         this.isSorted = function(){ return false; };
    273         this.getLevel = function(row){ return 0; };
    274         this.getImageSrc = function(row,col){ return null; };
    275         this.getRowProperties = function(row,props){};
    276         this.getCellProperties = function(row,col,props){};
    277         this.getColumnProperties = function(colid,col,props){};
    278         this.cycleHeader = function(col, elem) {
    279             var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
    280             if (treeType != "filter")
    281                 rdfDataTreeCollection.trees[treeType].sort(col.id.substr(0,col.id.indexOf("_")));
    282         };
    283         this.getCellProperties = function(row,col,props){
    284             var returnValue = null;
    285             if (!rdfDataTreeCollection._braille) {
    286                 var aserv=Components.classes["@mozilla.org/atom-service;1"].
    287                     getService(Components.interfaces.nsIAtomService);
    288                 if (typeof props == 'undefined') {
    289                     // Requires Gecko 22
    290                     switch (table[row][col.id.substr(0,col.id.indexOf("_"))]) {
    291                         case "yes": returnValue = aserv.getAtom("yes"); break;
    292                         case "no":  returnValue = aserv.getAtom("no"); break;
    293                     }
    294                 } else {
    295                     // Obsolete since Gecko 22
    296                     switch (table[row][col.id.substr(0,col.id.indexOf("_"))]) {
    297                         case "yes": props.AppendElement(aserv.getAtom("yes")); break;
    298                         case "no":  props.AppendElement(aserv.getAtom("no")); break;
    299                     }
    300                 }
     254      },
     255
     256      get _braille() {
     257        var braille = false;
     258        try {
     259          braille = (vI.prefroot.getCharPref("accessibility.usebrailledisplay") ||
     260            vI.prefroot.getCharPref("accessibility.usetexttospeech"));
     261        } catch (e) {};
     262        return braille;
     263      },
     264
     265      // generic custom tree view stuff
     266      treeView: function (table) {
     267        this.rowCount = table.length;
     268        this.getCellText = function (row, col) {
     269          var retValue = table[row][col.id.substr(0, col.id.indexOf("_"))];
     270          if (!rdfDataTreeCollection._braille && (retValue == "no" || retValue == "yes"))
     271            return ""; // image will be used as indicator
     272          else return retValue;
     273        };
     274        this.getCellValue = function (row, col) {
     275          return this.getCellText(row, col);
     276        };
     277        this.setTree = function (treebox) {
     278          this.treebox = treebox;
     279        };
     280        this.isEditable = function (row, col) {
     281          return col.editable;
     282        };
     283        this.isContainer = function (row) {
     284          return false;
     285        };
     286        this.isSeparator = function (row) {
     287          return false;
     288        };
     289        this.isSorted = function () {
     290          return false;
     291        };
     292        this.getLevel = function (row) {
     293          return 0;
     294        };
     295        this.getImageSrc = function (row, col) {
     296          return null;
     297        };
     298        this.getRowProperties = function (row, props) {};
     299        this.getCellProperties = function (row, col, props) {};
     300        this.getColumnProperties = function (colid, col, props) {};
     301        this.cycleHeader = function (col, elem) {
     302          var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
     303          if (treeType != "filter")
     304            rdfDataTreeCollection.trees[treeType].sort(col.id.substr(0, col.id.indexOf("_")));
     305        };
     306        this.getCellProperties = function (row, col, props) {
     307          var returnValue = null;
     308          if (!rdfDataTreeCollection._braille) {
     309            var aserv = Components.classes["@mozilla.org/atom-service;1"].
     310            getService(Components.interfaces.nsIAtomService);
     311            if (typeof props == 'undefined') {
     312              // Requires Gecko 22
     313              switch (table[row][col.id.substr(0, col.id.indexOf("_"))]) {
     314              case "yes":
     315                returnValue = aserv.getAtom("yes");
     316                break;
     317              case "no":
     318                returnValue = aserv.getAtom("no");
     319                break;
     320              }
     321            } else {
     322              // Obsolete since Gecko 22
     323              switch (table[row][col.id.substr(0, col.id.indexOf("_"))]) {
     324              case "yes":
     325                props.AppendElement(aserv.getAtom("yes"));
     326                break;
     327              case "no":
     328                props.AppendElement(aserv.getAtom("no"));
     329                break;
     330              }
    301331            }
    302             return returnValue;
    303         };
    304     },
    305 
    306    
    307     __setFilter : function (text) {
    308         // loop trough all trees
    309         for each (var treeType in rdfDataTreeCollection.treeTypes) {
    310             var tree = rdfDataTreeCollection.trees[treeType];
    311             tree.filterText = text;
    312             tree.loadTable();
    313         }
    314     },
    315 
    316     inputFilter : function(event) {
     332          }
     333          return returnValue;
     334        };
     335      },
     336
     337
     338      __setFilter: function (text) {
     339        // loop trough all trees
     340        for each(var treeType in rdfDataTreeCollection.treeTypes) {
     341          var tree = rdfDataTreeCollection.trees[treeType];
     342          tree.filterText = text;
     343          tree.loadTable();
     344        }
     345      },
     346
     347      inputFilter: function (event) {
    317348        var value = "";
    318349        if (typeof event.target.value == "string") {
    319             value = event.target.value.toLowerCase().replace(/\"/g,"");
    320         }
    321         rdfDataTreeCollection.__setFilter(value);
    322         document.getElementById("clearFilter").disabled = value.length == 0;
    323     },
    324    
    325     clearFilter : function() {
    326         document.getElementById("clearFilter").disabled = true;
    327         var filterElement = document.getElementById("filter");
    328         filterElement.focus();
    329         filterElement.value = "";
    330         rdfDataTreeCollection.__setFilter("");
    331     },
    332    
    333     __updateMenu : function(modifySelected, removeSelected) {
    334         var tree = rdfDataTreeCollection.trees[rdfDataTreeCollection.tabbox.selectedPanel.id];
    335         var noSelections = (tree.treeElem.view.selection.count == 0)
    336         modifySelected.setAttribute("disabled", noSelections)
    337         removeSelected.setAttribute("disabled", noSelections)   
    338     },
    339    
    340     updateButtonMenu : function() {
    341         rdfDataTreeCollection.__updateMenu(
    342             document.getElementById("editButton_" + rdfDataTreeCollection.tabbox.selectedPanel.id),
    343             document.getElementById("deleteButton_" + rdfDataTreeCollection.tabbox.selectedPanel.id))
    344     },
    345    
    346     updateContextMenu : function() {
    347         rdfDataTreeCollection.__updateMenu(
    348             document.getElementById("context_modifySelected"),
    349             document.getElementById("context_removeSelected"))
    350     },
    351    
    352     updateMenu : function() {
    353         rdfDataTreeCollection.__updateMenu(
    354             document.getElementById("menu_modifySelected"),
    355             document.getElementById("menu_removeSelected"))
    356     },
    357 
    358     modifySelected : function() {
    359         var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
    360         var tree = rdfDataTreeCollection.trees[treeType];
    361         if (tree.treeElem.view.selection.count == 0) return;
    362         if (tree.treeElem.view.selection.count > 5) {
    363             var warning = rdfDataTreeCollection._strings.GetStringFromName("vI_rdfDataTree.modify.Warning1") + " " +
    364                 tree.treeElem.view.selection.count + " " +
    365                 rdfDataTreeCollection._strings.GetStringFromName("vI_rdfDataTree.modify.Warning2")
    366             if (!rdfDataTreeCollection.promptService.confirm(window,"Warning",warning)) return;
    367         }
    368        
    369         var start = new Object(); var end = new Object();
    370         var numRanges = tree.treeElem.view.selection.getRangeCount();
    371 
    372         var retVar = { treeType: null };
    373         for (var t=0; t<numRanges; t++){
    374             tree.treeElem.view.selection.getRangeAt(t,start,end);
    375             for (var v=start.value; v<=end.value; v++)
    376                 window.openDialog("chrome://v_identity/content/vI_rdfDataEditor.xul",0,
    377                     "chrome, dialog, modal, alwaysRaised, resizable=yes",
    378                     tree.idTable[v], treeType,
    379                     rdfDataTreeCollection._rdfDatasource, retVar).focus();
    380         }
    381        
    382         // reload all trees (multiple types might have changed)
    383         for each (var treeType in rdfDataTreeCollection.treeTypes) {
    384             rdfDataTreeCollection.trees[treeType].idData = null;
    385             rdfDataTreeCollection.trees[treeType].loadTable()
    386         }
    387         rdfDataTreeCollection.tabbox.selectedTab = document.getElementById(retVar.treeType + "Tab");
    388         rdfDataTreeCollection.hideInfoBox();
    389     },
    390    
    391     removeSelected : function() {
    392         var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
    393         var tree = rdfDataTreeCollection.trees[treeType];
    394         if (tree.treeElem.view.selection.count == 0) return;
    395         var warning = rdfDataTreeCollection._strings.GetStringFromName("vI_rdfDataTree.remove.Warning1") + " " +
    396             tree.treeElem.view.selection.count + " " +
    397             rdfDataTreeCollection._strings.GetStringFromName("vI_rdfDataTree.remove.Warning2")
    398        
    399         if (!rdfDataTreeCollection.promptService.confirm(window,"Warning",warning)) return;
    400        
    401         var start = new Object(); var end = new Object();
    402         var numRanges = tree.treeElem.view.selection.getRangeCount();
    403 
    404         for (var t=0; t<numRanges; t++){
    405             tree.treeElem.view.selection.getRangeAt(t,start,end);
    406             for (var v=start.value; v<=end.value; v++){
    407                 rdfDataTreeCollection._rdfDatasource.removeVIdentityFromRDF(tree.idTable[v]["resource"], treeType)
    408             }
    409         }
    410        
    411         tree.idData = null; tree.idTable = null;
    412         tree.loadTable();
    413         rdfDataTreeCollection.hideInfoBox();
    414     },
    415    
    416     moveConstraints : function() {
    417         var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
    418         if (treeType != "filter") return;
    419         var tree = rdfDataTreeCollection.trees[treeType];
    420         if (tree.treeElem.view.selection.count == 0) {
    421             document.getElementById("reorderUpButton_filter").setAttribute("disabled","true");
    422             document.getElementById("reorderDownButton_filter").setAttribute("disabled","true");
    423             return;
    424         };
    425         var start = new Object(); var end = new Object();
    426         var numRanges = tree.treeElem.view.selection.getRangeCount();
    427         if (numRanges > 1) {
    428             document.getElementById("reorderUpButton_filter").setAttribute("disabled","true");
    429             document.getElementById("reorderDownButton_filter").setAttribute("disabled","true");
    430             return;
    431         }
    432         tree.treeElem.view.selection.getRangeAt(0,start,end);
    433         if (start.value > 0)
    434             document.getElementById("reorderUpButton_filter").removeAttribute("disabled");
    435         else    document.getElementById("reorderUpButton_filter").setAttribute("disabled","true");
    436         if (end.value < tree.idTable.length - 1)
    437             document.getElementById("reorderDownButton_filter").removeAttribute("disabled");
    438         else    document.getElementById("reorderDownButton_filter").setAttribute("disabled","true");
    439     },
    440 
    441     moveUpSelected : function() {
    442         var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
    443         if (treeType != "filter") return; // just to be safe, button should be disabled
    444         var tree = rdfDataTreeCollection.trees[treeType];
    445         if (tree.treeElem.view.selection.count == 0) return; // just to be safe, button should be disabled
    446 
    447         var start = new Object(); var end = new Object();
    448         var numRanges = tree.treeElem.view.selection.getRangeCount();
    449         if (numRanges > 1) return;  // just to be safe, button should be disabled
    450        
    451         tree.treeElem.view.selection.getRangeAt(0,start,end);
    452         for (var v=start.value; v<=end.value; v++){
    453             var resource = rdfDataTreeCollection._rdfDatasource.filterContainer.RemoveElementAt(v+1, true);
    454             rdfDataTreeCollection._rdfDatasource.filterContainer.InsertElementAt(resource,v,true);
    455         }
    456         tree.idData = null; tree.idTable = null;
    457         tree.loadTable();
    458         tree.treeElem.view.selection.rangedSelect(start.value-1,end.value-1,false);
    459     },
    460 
    461     moveDownSelected : function() {
    462         var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
    463         if (treeType != "filter") return; // just to be safe, button should be disabled
    464         var tree = rdfDataTreeCollection.trees[treeType];
    465         if (tree.treeElem.view.selection.count == 0) return; // just to be safe, button should be disabled
    466 
    467         var start = new Object(); var end = new Object();
    468         var numRanges = tree.treeElem.view.selection.getRangeCount();
    469         if (numRanges > 1) return;  // just to be safe, button should be disabled
    470        
    471         tree.treeElem.view.selection.getRangeAt(0,start,end);
    472         for (var v=end.value; v>=start.value; v--){
    473             var resource = rdfDataTreeCollection._rdfDatasource.filterContainer.RemoveElementAt(v+1, true);
    474             rdfDataTreeCollection._rdfDatasource.filterContainer.InsertElementAt(resource,v+2,true);
    475         }
    476         tree.idData = null; tree.idTable = null;
    477         tree.loadTable();
    478         tree.treeElem.view.selection.rangedSelect(start.value+1,end.value+1,false);
    479     },
    480 
    481     infoBoxHidden : true,
    482     overflow : function() {
    483         if (rdfDataTreeCollection.infoBoxHidden) return;
    484         var htmlBox = document.getElementById("rdfDataTreeCollectionInfoBox")
    485         htmlBox.setAttribute("style", "height:" + htmlBox.contentDocument.lastChild.scrollHeight +"px");
    486     },
    487 
    488     hideInfoBox : function() {
    489         rdfDataTreeCollection.infoBoxHidden = true;
    490         document.getElementById("rdfDataTreeCollectionInfoBox").setAttribute("style", "height:0px");
    491         for each (var treeType in rdfDataTreeCollection.treeTypes) {
    492             try { if (rdfDataTreeCollection.trees[treeType])
    493                 rdfDataTreeCollection.trees[treeType].treeElem.view.selection.selectNone() } catch (e) { }
    494         }
    495     },
    496 
    497     selectAll : function() {
    498         var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
    499         var tree = rdfDataTreeCollection.trees[treeType];
    500         tree.treeElem.view.selection.selectAll();
    501     },
    502    
    503     newItem : function() {
    504         var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
    505         var newItemPreset = { identityData : new vI.identityData ("", null, null, vI.NO_SMTP_TAG, null, null) };
    506         var retVar = { treeType: null };
    507 
    508         window.openDialog("chrome://v_identity/content/vI_rdfDataEditor.xul",0,
    509             "chrome, dialog, modal, alwaysRaised, resizable=yes",
    510             newItemPreset, treeType,
    511             rdfDataTreeCollection._rdfDatasource, retVar).focus();
    512 
    513         // reload all trees (multiple types might have changed)
    514         for each (var treeType in rdfDataTreeCollection.treeTypes) {
    515             rdfDataTreeCollection.trees[treeType].idData = null;
    516             rdfDataTreeCollection.trees[treeType].idTable = null;
    517             rdfDataTreeCollection.trees[treeType].loadTable()
    518         }
    519         rdfDataTreeCollection.tabbox.selectedTab = document.getElementById(retVar.treeType + "Tab");
    520         rdfDataTreeCollection.hideInfoBox();
    521     }
    522 };
    523 
    524 vI.rdfDataTreeCollection = rdfDataTreeCollection;
    525 vI.rdfDataTree = rdfDataTree;
    526 }});
     350          value = event.target.value.toLowerCase().replace(/\"/g, "");
     351        }
     352        rdfDataTreeCollection.__setFilter(value);
     353        document.getElementById("clearFilter").disabled = value.length == 0;
     354      },
     355
     356      clearFilter: function () {
     357        document.getElementById("clearFilter").disabled = true;
     358        var filterElement = document.getElementById("filter");
     359        filterElement.focus();
     360        filterElement.value = "";
     361        rdfDataTreeCollection.__setFilter("");
     362      },
     363
     364      __updateMenu: function (modifySelected, removeSelected) {
     365        var tree = rdfDataTreeCollection.trees[rdfDataTreeCollection.tabbox.selectedPanel.id];
     366        var noSelections = (tree.treeElem.view.selection.count == 0)
     367        modifySelected.setAttribute("disabled", noSelections)
     368        removeSelected.setAttribute("disabled", noSelections)
     369      },
     370
     371      updateButtonMenu: function () {
     372        rdfDataTreeCollection.__updateMenu(
     373          document.getElementById("editButton_" + rdfDataTreeCollection.tabbox.selectedPanel.id),
     374          document.getElementById("deleteButton_" + rdfDataTreeCollection.tabbox.selectedPanel.id))
     375      },
     376
     377      updateContextMenu: function () {
     378        rdfDataTreeCollection.__updateMenu(
     379          document.getElementById("context_modifySelected"),
     380          document.getElementById("context_removeSelected"))
     381      },
     382
     383      updateMenu: function () {
     384        rdfDataTreeCollection.__updateMenu(
     385          document.getElementById("menu_modifySelected"),
     386          document.getElementById("menu_removeSelected"))
     387      },
     388
     389      modifySelected: function () {
     390        var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
     391        var tree = rdfDataTreeCollection.trees[treeType];
     392        if (tree.treeElem.view.selection.count == 0) return;
     393        if (tree.treeElem.view.selection.count > 5) {
     394          var warning = rdfDataTreeCollection._strings.GetStringFromName("vI_rdfDataTree.modify.Warning1") + " " +
     395            tree.treeElem.view.selection.count + " " +
     396            rdfDataTreeCollection._strings.GetStringFromName("vI_rdfDataTree.modify.Warning2")
     397          if (!rdfDataTreeCollection.promptService.confirm(window, "Warning", warning)) return;
     398        }
     399
     400        var start = new Object();
     401        var end = new Object();
     402        var numRanges = tree.treeElem.view.selection.getRangeCount();
     403
     404        var retVar = {
     405          treeType: null
     406        };
     407        for (var t = 0; t < numRanges; t++) {
     408          tree.treeElem.view.selection.getRangeAt(t, start, end);
     409          for (var v = start.value; v <= end.value; v++)
     410            window.openDialog("chrome://v_identity/content/vI_rdfDataEditor.xul", 0,
     411              "chrome, dialog, modal, alwaysRaised, resizable=yes",
     412              tree.idTable[v], treeType,
     413              rdfDataTreeCollection._rdfDatasource, retVar).focus();
     414        }
     415
     416        // reload all trees (multiple types might have changed)
     417        for each(var treeType in rdfDataTreeCollection.treeTypes) {
     418          rdfDataTreeCollection.trees[treeType].idData = null;
     419          rdfDataTreeCollection.trees[treeType].loadTable()
     420        }
     421        rdfDataTreeCollection.tabbox.selectedTab = document.getElementById(retVar.treeType + "Tab");
     422        rdfDataTreeCollection.hideInfoBox();
     423      },
     424
     425      removeSelected: function () {
     426        var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
     427        var tree = rdfDataTreeCollection.trees[treeType];
     428        if (tree.treeElem.view.selection.count == 0) return;
     429        var warning = rdfDataTreeCollection._strings.GetStringFromName("vI_rdfDataTree.remove.Warning1") + " " +
     430          tree.treeElem.view.selection.count + " " +
     431          rdfDataTreeCollection._strings.GetStringFromName("vI_rdfDataTree.remove.Warning2")
     432
     433        if (!rdfDataTreeCollection.promptService.confirm(window, "Warning", warning)) return;
     434
     435        var start = new Object();
     436        var end = new Object();
     437        var numRanges = tree.treeElem.view.selection.getRangeCount();
     438
     439        for (var t = 0; t < numRanges; t++) {
     440          tree.treeElem.view.selection.getRangeAt(t, start, end);
     441          for (var v = start.value; v <= end.value; v++) {
     442            rdfDataTreeCollection._rdfDatasource.removeVIdentityFromRDF(tree.idTable[v]["resource"], treeType)
     443          }
     444        }
     445
     446        tree.idData = null;
     447        tree.idTable = null;
     448        tree.loadTable();
     449        rdfDataTreeCollection.hideInfoBox();
     450      },
     451
     452      moveConstraints: function () {
     453        var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
     454        if (treeType != "filter") return;
     455        var tree = rdfDataTreeCollection.trees[treeType];
     456        if (tree.treeElem.view.selection.count == 0) {
     457          document.getElementById("reorderUpButton_filter").setAttribute("disabled", "true");
     458          document.getElementById("reorderDownButton_filter").setAttribute("disabled", "true");
     459          return;
     460        };
     461        var start = new Object();
     462        var end = new Object();
     463        var numRanges = tree.treeElem.view.selection.getRangeCount();
     464        if (numRanges > 1) {
     465          document.getElementById("reorderUpButton_filter").setAttribute("disabled", "true");
     466          document.getElementById("reorderDownButton_filter").setAttribute("disabled", "true");
     467          return;
     468        }
     469        tree.treeElem.view.selection.getRangeAt(0, start, end);
     470        if (start.value > 0)
     471          document.getElementById("reorderUpButton_filter").removeAttribute("disabled");
     472        else document.getElementById("reorderUpButton_filter").setAttribute("disabled", "true");
     473        if (end.value < tree.idTable.length - 1)
     474          document.getElementById("reorderDownButton_filter").removeAttribute("disabled");
     475        else document.getElementById("reorderDownButton_filter").setAttribute("disabled", "true");
     476      },
     477
     478      moveUpSelected: function () {
     479        var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
     480        if (treeType != "filter") return; // just to be safe, button should be disabled
     481        var tree = rdfDataTreeCollection.trees[treeType];
     482        if (tree.treeElem.view.selection.count == 0) return; // just to be safe, button should be disabled
     483
     484        var start = new Object();
     485        var end = new Object();
     486        var numRanges = tree.treeElem.view.selection.getRangeCount();
     487        if (numRanges > 1) return; // just to be safe, button should be disabled
     488
     489        tree.treeElem.view.selection.getRangeAt(0, start, end);
     490        for (var v = start.value; v <= end.value; v++) {
     491          var resource = rdfDataTreeCollection._rdfDatasource.filterContainer.RemoveElementAt(v + 1, true);
     492          rdfDataTreeCollection._rdfDatasource.filterContainer.InsertElementAt(resource, v, true);
     493        }
     494        tree.idData = null;
     495        tree.idTable = null;
     496        tree.loadTable();
     497        tree.treeElem.view.selection.rangedSelect(start.value - 1, end.value - 1, false);
     498      },
     499
     500      moveDownSelected: function () {
     501        var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
     502        if (treeType != "filter") return; // just to be safe, button should be disabled
     503        var tree = rdfDataTreeCollection.trees[treeType];
     504        if (tree.treeElem.view.selection.count == 0) return; // just to be safe, button should be disabled
     505
     506        var start = new Object();
     507        var end = new Object();
     508        var numRanges = tree.treeElem.view.selection.getRangeCount();
     509        if (numRanges > 1) return; // just to be safe, button should be disabled
     510
     511        tree.treeElem.view.selection.getRangeAt(0, start, end);
     512        for (var v = end.value; v >= start.value; v--) {
     513          var resource = rdfDataTreeCollection._rdfDatasource.filterContainer.RemoveElementAt(v + 1, true);
     514          rdfDataTreeCollection._rdfDatasource.filterContainer.InsertElementAt(resource, v + 2, true);
     515        }
     516        tree.idData = null;
     517        tree.idTable = null;
     518        tree.loadTable();
     519        tree.treeElem.view.selection.rangedSelect(start.value + 1, end.value + 1, false);
     520      },
     521
     522      infoBoxHidden: true,
     523      overflow: function () {
     524        if (rdfDataTreeCollection.infoBoxHidden) return;
     525        var htmlBox = document.getElementById("rdfDataTreeCollectionInfoBox")
     526        htmlBox.setAttribute("style", "height:" + htmlBox.contentDocument.lastChild.scrollHeight + "px");
     527      },
     528
     529      hideInfoBox: function () {
     530        rdfDataTreeCollection.infoBoxHidden = true;
     531        document.getElementById("rdfDataTreeCollectionInfoBox").setAttribute("style", "height:0px");
     532        for each(var treeType in rdfDataTreeCollection.treeTypes) {
     533          try {
     534            if (rdfDataTreeCollection.trees[treeType])
     535              rdfDataTreeCollection.trees[treeType].treeElem.view.selection.selectNone()
     536          } catch (e) {}
     537        }
     538      },
     539
     540      selectAll: function () {
     541        var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
     542        var tree = rdfDataTreeCollection.trees[treeType];
     543        tree.treeElem.view.selection.selectAll();
     544      },
     545
     546      newItem: function () {
     547        var treeType = rdfDataTreeCollection.tabbox.selectedPanel.id;
     548        var newItemPreset = {
     549          identityData: new vI.identityData("", null, null, vI.NO_SMTP_TAG, null, null)
     550        };
     551        var retVar = {
     552          treeType: null
     553        };
     554
     555        window.openDialog("chrome://v_identity/content/vI_rdfDataEditor.xul", 0,
     556          "chrome, dialog, modal, alwaysRaised, resizable=yes",
     557          newItemPreset, treeType,
     558          rdfDataTreeCollection._rdfDatasource, retVar).focus();
     559
     560        // reload all trees (multiple types might have changed)
     561        for each(var treeType in rdfDataTreeCollection.treeTypes) {
     562          rdfDataTreeCollection.trees[treeType].idData = null;
     563          rdfDataTreeCollection.trees[treeType].idTable = null;
     564          rdfDataTreeCollection.trees[treeType].loadTable()
     565        }
     566        rdfDataTreeCollection.tabbox.selectedTab = document.getElementById(retVar.treeType + "Tab");
     567        rdfDataTreeCollection.hideInfoBox();
     568      }
     569    };
     570
     571    vI.rdfDataTreeCollection = rdfDataTreeCollection;
     572    vI.rdfDataTree = rdfDataTree;
     573  }
     574});
Note: See TracChangeset for help on using the changeset viewer.