* ***** END LICENSE BLOCK ***** */\r
\r
/*\r
- * TreeThread observer\r
+ * XimfThreadTreeDBViewObserver\r
+ * 'MsgCreateDBView' : Special event that gets fired whenever a view is created. \r
+ * When that event fires, set up the custom column handler on the new view.\r
*/\r
var XimfThreadTreeDBViewObserver = {\r
// Components.interfaces.nsIObserver\r
- observe: function(aMsgFolder, aTopic, aData) { \r
- if(gXimfThreadTree) gXimfThreadTree.addCustomColumnHandler();\r
+ observe: function(aMsgFolder, aTopic, aData){ \r
+ gConsole.logStringMessage("ximfmail - XimfThreadTreeDBViewObserver:observe");\r
+ XimfThreadTree.getInstance().create();\r
}\r
}\r
\r
-/* \r
- * XimfThreadTree class\r
+/*\r
+ * Column handler template definition \r
+ */\r
+function XimfCustomColumnHandler(property){\r
+ // Properties\r
+ this.property = property;\r
+ this.isString = true; \r
+ \r
+ // Functions\r
+ this.getSortStringForRow = function (hdr){ return (this.isString) ? hdr.getStringProperty(this.property) : ""; };\r
+ this.isString = function (){ return this.isString; };\r
+ this.getCellProperties = function (row, col, props) {};\r
+ this.getRowProperties = function(row, props){};\r
+ this.getImageSrc = function (row, col){return null; };\r
+ this.getSortLongForRow = function(hdr){ return (this.isString) ? 0 : new Number(hdr.getStringProperty(this.property)).value; };\r
+ this.getCellText = function (row, col){\r
+ // get cell informations\r
+ var key = gDBView.getKeyAt(row);\r
+ var hdr = gDBView.db.GetMsgHdrForKey(key);\r
+ var value = hdr.getStringProperty(this.property); \r
+ // get ilk value if exists \r
+ var ilklabel = XimfThreadTree.getInstance().getIlkColumnArray()[this.property.toLowerCase()][value.toLowerCase()];\r
+ if(ilklabel == undefined) ilklabel = value;\r
+ //gConsole.logStringMessage("[ximfmail - XimfCustomColumnHandler ] getCellText "+this.property+" = " + ilklabel ); \r
+ return ilklabel; \r
+ };\r
+};\r
+\r
+/*\r
+ * XimfThreadTree \r
+ * Custom Columns with XIMF headers\r
+ * Get XIMF headers in xml containers <ihm> of Ximfmail instances : \r
+ * <ximf:treeRcv>\r
+ * <ximf:headerRef>header-reference</ximf:headerRef> \r
+ * <ximf:headerRef>header-reference-other</ximf:headerRef>\r
+ * </ximf:treeRcv>\r
*/\r
-function XimfThreadTree(){\r
+var XimfThreadTree = (function(){\r
// private:\r
+ var instantiated; \r
+ var _chromeXslTreeRcv = "chrome://theme_ximfmail/content/threadTree-ximfmail.xsl";\r
var _ximfHdrArrayByID = [];\r
+ var _refAccountArray = []; \r
+ var _ximfIlilkCustomColumnArray = [];\r
\r
- //\r
- function isDataInArray(data,array){\r
- for(var i=0; i<array.length; ++i){\r
- if(data == array[i]){\r
- return true;\r
- }\r
- }\r
- return false;\r
- }\r
- \r
- /*\r
- * Get ilk values from instance\r
- */\r
- function LoadIlkColumnsValues2(currentInstance){\r
- try{\r
- var ilkArray = [];\r
- // get xml schema for instance\r
- if(!gXimfCatalog){ \r
- gXimfCatalog = new XimfCatalog();\r
+ // add DOM element to tree\r
+ function addColumn(domTreecol,idTreecol){\r
+ $("#threadCols").append(domTreecol); // istancedom_treecol is mofified by append jquery function is called\r
+ var splitter_dom = document.createElement("splitter");\r
+ $(splitter_dom).attr("reftreecol",idTreecol);\r
+ $(splitter_dom).attr("class","tree-splitter");\r
+ $(splitter_dom).attr("ximfheadtree","1"); \r
+ $("#threadCols").append(splitter_dom);\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:addColumn] add new ximf column to Dom - id = " + idTreecol);\r
+ };\r
+ // attach handler object to custom column. addColumnHandler that takes a column ID\r
+ function addColumnHandler(idTreecol){\r
+ if (gDBView){ \r
+ gDBView.addColumnHandler(idTreecol, new XimfCustomColumnHandler(idTreecol.toLowerCase())); \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:addColumnHandler] load new XimfCustomColumnHandler for column " + idTreecol);\r
}\r
- var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\r
- var completePath = getFilePathInProfile("extensions/"+gXimfCatalog.getSchemaInstance(currentInstance));\r
- dir.initWithPath( completePath ); \r
- if(!dir.exists()){ \r
- gConsole.logStringMessage("[Ximfmail - createThreadTree - LoadIlkColumnsValues2] Error loading schema file : " + completePath);\r
- return;\r
- } \r
- var objXML = GetXmlDocument(completePath);\r
- var headers = objXML.getElementsByTagName("ximf:header");\r
- \r
- // get xml dictionary parser\r
- var urlDictionary = getFilePathInProfile("extensions/"+gXimfCatalog.getDictionaryInstance(currentInstance));\r
- dir.initWithPath( urlDictionary ); \r
- if(!dir.exists()){ \r
- gConsole.logStringMessage("[Ximfmail - LoadIlkColumnsValues2] Error loading dictionary file : " + completePath);\r
- return;\r
+ };\r
+ // remove DOM element from tree\r
+ function deleteColummn(idTreeCol){ \r
+ for(var i = 0 ; i < _ximfHdrArrayByID.length ; ++i){\r
+ if(_ximfHdrArrayByID[i] === idTreeCol){\r
+ _ximfHdrArrayByID.splice(i,1);\r
+ $("#"+idTreeCol).remove();\r
+ $("splitter[reftreecol='"+idTreeCol+"']").remove();\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:deleteColummn] remove ximf column from Dom - id = " + idTreeCol); \r
+ }\r
} \r
- var dicoXML = GetXmlDocument(urlDictionary);\r
- var dicoElements = dicoXML.getElementsByTagName("ximf:locale");\r
- \r
- // get local lang \r
- var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);\r
- var refLang = prefs.getCharPref("general.useragent.locale");\r
- if(!refLang) refLang = "fr-FR"; \r
- var ilkEntities = null;\r
- for(var idxLang=0 ; idxLang < dicoElements.length ; ++idxLang){ \r
- if(dicoElements[idxLang].getAttribute("lang") == refLang){\r
- ilkEntities = dicoElements[idxLang].getElementsByTagName("ximf:ilk");\r
+ };\r
+ // update Ximfmail column\r
+ function updateXimfHdrArrayByID(idToUpdate){\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfHdrArrayByID] update Ximfmail column " + idToUpdate); \r
+ var isIdExist = false;\r
+ for(var i = 0 ; i < _ximfHdrArrayByID.length ; ++i){\r
+ if(_ximfHdrArrayByID[i] === idToUpdate){ \r
+ isIdExist = true;\r
break;\r
}\r
}\r
- \r
- // parse XML and get labels\r
- for(var i=0 ; i < _ximfHdrArrayByID.length ; ++i){\r
- var currentTreeColId = _ximfHdrArrayByID[i];\r
- for(var idxH = 0 ; idxH < headers.length; ++idxH){ \r
- var attrHeaderList = headers[idxH].attributes; \r
- var headerName = headers[idxH].getAttribute("headerName");\r
- \r
- if(headerName.toLowerCase() == currentTreeColId.toLowerCase()){ \r
- var stringListElt = headers[idxH].getElementsByTagName("ximf:string");\r
- var treeElement = document.getElementById(currentTreeColId);\r
- \r
- var reg=new RegExp(' ', "gi");\r
- for(var j=0 ; j< stringListElt.length ; j++){\r
- try{ \r
- // get values from instance headers\r
- var sContent = stringListElt[j].getAttribute("content"); \r
- var sIlk = stringListElt[j].getAttribute("ilk")\r
- \r
- // get ilk entity from instance dictionay\r
- if(ilkEntities){\r
- for(var idxIlk = 0 ; idxIlk < ilkEntities.length ; ++idxIlk){\r
- if(ilkEntities[idxIlk].getAttribute("entity") == sIlk){\r
- sIlk = ilkEntities[idxIlk].textContent;\r
- //gConsole.logStringMessage("[Ximfmail - LoadIlkColumnsValues2] sIlk : " + sIlk); \r
- break;\r
- }\r
- }\r
- }\r
- // set values to tree column \r
- var ilkid = "ximfkey_"+sContent;\r
- ilkid = ilkid.replace(reg,"_");\r
- //gConsole.logStringMessage("[Ximfmail - LoadIlkColumnsValues2] ]"+ilkid +":"+sIlk+"["); \r
- treeElement.setAttribute(ilkid,sIlk); \r
- }catch(e){} \r
- }\r
- break;\r
- }\r
- }\r
- }\r
-\r
- }catch(e){\r
- gConsole.logStringMessage("[ximfmail - LoadIlkColumnsValues ] " + e +"\nline : " + e.lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ if(!isIdExist){\r
+ _ximfHdrArrayByID.push(idToUpdate);\r
}\r
- return ilkArray;\r
}\r
- \r
- //\r
- function addCustomPreferences(preference, lower){\r
- var xListHdr = "";\r
- var prefList = [];\r
- var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);\r
+ // set Ximf headers to display to Thunderbird to check for x-headers\r
+ function addCustomPreferences(preference){\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateColumnToHide] Set Ximf headers to display to Thunderbird pref : " + preference);\r
+ var xListHdr = "";\r
+ var prefList = [];\r
+ var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);\r
\r
- try {\r
- xListHdr = prefBranch.getCharPref(preference);\r
- if((xListHdr) != ""){\r
- var reg=new RegExp("[ ]+", "g");\r
- prefList=xListHdr.split(reg); \r
- }\r
- } catch(ex) {}\r
-\r
- // add only new headers\r
- for (var i = 0; i < _ximfHdrArrayByID.length; i++) { \r
- if (!isDataInArray(_ximfHdrArrayByID[i].toLowerCase(),prefList)){\r
- if (xListHdr != "") {\r
- xListHdr += " ";\r
- } \r
- xListHdr += _ximfHdrArrayByID[i].toLowerCase();\r
- }\r
- } \r
- prefBranch.setCharPref(preference, xListHdr);\r
- };\r
- //Column handler template definition \r
- function XimfCustomColumnHandler(property) {\r
- // Properties\r
- this.property = property;\r
- this.isString = true; \r
- \r
- // Functions\r
- this.getSortStringForRow = function (hdr){ return (this.isString) ? hdr.getStringProperty(this.property) : ""; };\r
- this.isString = function (){ return this.isString; };\r
- this.getCellProperties = function (row, col, props) {};\r
- this.getRowProperties = function(row, props){};\r
- this.getImageSrc = function (row, col){return null; };\r
- this.getSortLongForRow = function(hdr){ return (this.isString) ? 0 : new Number(hdr.getStringProperty(this.property)).value; };\r
- this.getIlkValue = function(value){\r
- var newValue = value;\r
- listTreecol = $("treecol[ximfheadtree='1']");\r
- var reg=new RegExp(' ', "gi");\r
- for(var i=0; i<listTreecol.length; ++i){\r
- if(listTreecol[i].getAttribute("id").toLowerCase()== this.property){\r
- // set values to tree column\r
- var ilkid = "ximfkey_"+value;\r
- ilkid = ilkid.replace(reg,"_"); \r
- newValue = listTreecol[i].getAttribute(ilkid);\r
- if (newValue == ""){ \r
- newValue = value;\r
- }\r
- break;\r
+ try {\r
+ xListHdr = prefBranch.getCharPref(preference);\r
+ if((xListHdr) != ""){\r
+ var reg=new RegExp("[ ]+", "g");\r
+ prefList=xListHdr.split(reg); \r
+ }\r
+ } catch(ex) {}\r
+ \r
+ function isDataInArray(data,array){ \r
+ for(var i=0; i<array.length; ++i){\r
+ if(data == array[i]){\r
+ return true;\r
}\r
}\r
- return newValue;\r
- };\r
- this.getCellText = function (row, col){\r
- var key = gDBView.getKeyAt(row);\r
- var hdr = gDBView.db.GetMsgHdrForKey(key);\r
- var value = hdr.getStringProperty(this.property);\r
- //return hdr.getStringProperty(this.property);\r
- //return value.toLowerCase();\r
- return this.getIlkValue(value);;\r
- }; \r
+ return false;\r
+ }; \r
+ \r
+ // add only new headers\r
+ for (var i = 0; i < _ximfHdrArrayByID.length; i++) { \r
+ if (!isDataInArray(_ximfHdrArrayByID[i].toLowerCase(),prefList)){\r
+ if (xListHdr != "") {\r
+ xListHdr += " ";\r
+ } \r
+ xListHdr += _ximfHdrArrayByID[i].toLowerCase();\r
+ }\r
+ }\r
+ prefBranch.setCharPref(preference, xListHdr);\r
};\r
- \r
- function updateColumnToHide(){\r
+ // obsolete?\r
+ function updateColumnToHide(){ \r
try{\r
if(_ximfHdrArrayByID.length <= 0 ) return;\r
if(gCurrentIdentity){ \r
var prefList = gCurrentIdentity.getCharAttribute("ximfmail_context_DBHeaders");\r
- if(prefList == "undefined") return;\r
+ if(prefList == undefined) return;\r
for(var i=0; i<_ximfHdrArrayByID.length; ++i){\r
if(prefList.lastIndexOf(_ximfHdrArrayByID[i]) != -1){\r
$("treecol[id='"+_ximfHdrArrayByID[i]+"']").attr("hidden","true");\r
}\r
}\r
}catch(e){\r
- gConsole.logStringMessage("[ximfmail - createThreadTree ] " + e +"\nline : " + Error().lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateColumnToHide ] " + e +"\nline : " + Error().lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
} \r
}; \r
- \r
- // public:\r
- if(typeof XimfThreadTree.initialized == "undefined"){\r
- //load tree cells with ximf headers\r
- XimfThreadTree.prototype.createThreadTree = function(){\r
- try{\r
- if(gCurrentIdentity){\r
- var currentInstance = gCurrentIdentity.getCharAttribute("ximfmail_instance_treethread_ref");\r
- // delete previous ximfmail columns\r
- $("splitter[ximfheadtree='1']").remove();\r
- $("treecol[ximfheadtree='1']").remove();\r
- _ximfHdrArrayByID.splice(0,_ximfHdrArrayByID.length);\r
- // new instance -> new ximf columns\r
- if(gCurrentIdentity.getBoolAttribute(XIMF_PREF_IDENTITY_USE_XIMFMAIL)){\r
- $("#threadCols").append(CreateDOMWithXimfInstance(currentInstance,gChromeXslTreeRcv));\r
- \r
- // save list of ximf columns\r
- var listID = $("#threadCols treecol[ximfheadtree='1']");\r
- \r
- if(!listID) return;\r
- for(var idx=0; idx<listID.length; ++idx){\r
- _ximfHdrArrayByID.push(listID[idx].id); \r
+ // get ilk values from instance\r
+ function updateXimfIlkCustomColumnArray(currentInstance){\r
+ try{\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfIlkCustomColumnArray ] create ilk array for Ximf values of instance : "+currentInstance);\r
+ \r
+ // get xml schema for instance\r
+ gXimfCatalog = XimfCatalog.getInstance();\r
+ \r
+ var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\r
+ var completePath = getFilePathInProfile("extensions/"+gXimfCatalog.getSchemaInstance(currentInstance));\r
+ dir.initWithPath( completePath ); \r
+ if(!dir.exists()){ \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfIlkCustomColumnArray] Error on loading schema file : " + completePath);\r
+ return;\r
+ } \r
+ var objXML = GetXmlDocument(completePath);\r
+ var headers = objXML.getElementsByTagName("ximf:header");\r
+ \r
+ // get xml dictionary parser\r
+ var urlDictionary = getFilePathInProfile("extensions/"+gXimfCatalog.getDictionaryInstance(currentInstance));\r
+ dir.initWithPath( urlDictionary ); \r
+ if(!dir.exists()){ \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfIlkCustomColumnArray] Error on loading dictionary file : " + completePath);\r
+ return;\r
+ } \r
+ var dicoXML = GetXmlDocument(urlDictionary);\r
+ var dicoElements = dicoXML.getElementsByTagName("ximf:locale");\r
+ \r
+ // get local lang \r
+ var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);\r
+ var refLang = prefs.getCharPref("general.useragent.locale");\r
+ if(!refLang) refLang = "fr"; \r
+ var ilkEntities = null;\r
+ for(var idxLang=0 ; idxLang < dicoElements.length ; ++idxLang){ \r
+ if(dicoElements[idxLang].getAttribute("lang") == refLang){\r
+ ilkEntities = dicoElements[idxLang].getElementsByTagName("ximf:ilk");\r
+ break;\r
+ }\r
+ }\r
+ \r
+ // parse XML and get ilk values\r
+ for(var i=0 ; i < _ximfHdrArrayByID.length ; ++i){\r
+ var currentTreeColId = _ximfHdrArrayByID[i];\r
+ for(var idxH = 0 ; idxH < headers.length; ++idxH){ \r
+ var attrHeaderList = headers[idxH].attributes; \r
+ var headerName = headers[idxH].getAttribute("headerName"); \r
+ if(headerName.toLowerCase() == currentTreeColId.toLowerCase()){\r
+ var stringListElt = headers[idxH].getElementsByTagName("ximf:string"); \r
+ var tmparray = new Array(); \r
+ for(var j=0 ; j< stringListElt.length ; j++){\r
+ try{ \r
+ // get values from instance headers\r
+ var sContent = stringListElt[j].getAttribute("content"); \r
+ var sIlk = stringListElt[j].getAttribute("ilk") \r
+ // get ilk entity from instance dictionay\r
+ if(ilkEntities){\r
+ for(var idxIlk = 0 ; idxIlk < ilkEntities.length ; ++idxIlk){\r
+ if(ilkEntities[idxIlk].getAttribute("entity") == sIlk){\r
+ sIlk = ilkEntities[idxIlk].textContent;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ \r
+ // push array\r
+ tmparray[sContent.toLowerCase()]=sIlk;\r
+ \r
+ }catch(e){\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfIlkCustomColumnArray ] " + e +"\nline : " + e.lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ } \r
}\r
- updateColumnToHide();\r
- //LoadIlkColumnsValues(currentInstance);\r
- LoadIlkColumnsValues2(currentInstance); \r
- \r
- // use by Thunderbird to check for x-headers\r
- addCustomPreferences('mailnews.customDBHeaders', true); \r
+ // save ilk values for an ximf header \r
+ if(tmparray) _ximfIlilkCustomColumnArray[headerName.toLowerCase()] = tmparray;\r
}\r
- } \r
- }catch(e){\r
- gConsole.logStringMessage("[ximfmail - createThreadTree ] " + e +"\nline : " + Error().lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
- }\r
- }; \r
- XimfThreadTree.prototype.addCustomColumnHandler = function(){\r
- if(_ximfHdrArrayByID.length <= 0 ) return;\r
- if (gDBView) { \r
- for(var i=0; i<_ximfHdrArrayByID.length; ++i){\r
- gDBView.addColumnHandler(_ximfHdrArrayByID[i], new XimfCustomColumnHandler(_ximfHdrArrayByID[i].toLowerCase()));\r
}\r
}\r
- };\r
- XimfThreadTree.prototype.saveColumnToHide = function(){\r
- var listID = $("#threadCols treecol[ximfheadtree='1']");//\r
- try{\r
- if(gCurrentIdentity){ \r
- prefList = ""\r
- for(var i=0; i<listID.length; ++i){\r
- if(listID[i].getAttribute("hidden") == "true"){\r
- if(prefList != "") prefList +=",";\r
- prefList += listID[i].id;\r
+ }catch(e){ \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfIlkCustomColumnArray] " + e +"\nline : " + e.lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ } \r
+ };\r
+ function init(){ \r
+ // singleton here\r
+ return{\r
+ // create : create Ximf columns if don't exist and/or add handler on Ximf columns\r
+ // return true if success / false if failed\r
+ create : function(){\r
+ try{\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] create begin - _ximfHdrArrayByID len : "+_ximfHdrArrayByID.length);\r
+ GetCurrentUser();\r
+ if(!gCurrentIdentity) return false;\r
+ var refIdentityKey = gCurrentIdentity.key;\r
+ var currentlistID = $("#threadCols treecol[ximfheadtree='1']"); // get existing Ximf columns \r
+ \r
+ // check if Ximf columns of account already created \r
+ for(var i = 0 ; i < _refAccountArray.length ; ++i){\r
+ if(_refAccountArray[i] === refIdentityKey){\r
+ // account already updated for this session, don't do it again,\r
+ // handler Ximfmail columns headers must be fired \r
+ for(var idx =0 ; idx < currentlistID.length ; ++idx){\r
+ addColumnHandler(currentlistID[idx].id); \r
+ } \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] account already updated for this session - handler Ximfmail columns");\r
+ return true; \r
+ } \r
+ }\r
+ _refAccountArray.push(refIdentityKey);\r
+ \r
+ // get Ximfmail instance with headers to custom \r
+ var currentInstance = gCurrentIdentity.getCharAttribute("ximfmail_instance_treethread_ref"); \r
+ var instancedom = CreateDOMWithXimfInstance(currentInstance,_chromeXslTreeRcv);\r
+ var istancedom_treecol = instancedom.childNodes;\r
+ \r
+ // add new headers to tree\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] " + istancedom_treecol.length + " elements in Ximfmail instance to custom");\r
+ for(var k = istancedom_treecol.length - 1 ; k >= 0 ; --k){\r
+ try{\r
+ var instanceId = $(istancedom_treecol[k]).attr("id"); \r
+ var isCurrentIdInInstance = false;\r
+ for(var l = 0 ; l < currentlistID.length ; ++l){\r
+ if( instanceId === $(currentlistID[l]).attr("id")){\r
+ isCurrentIdInInstance = true; \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] instance " + instanceId + " exists"); \r
+ break;\r
+ }\r
+ }\r
+ if(!isCurrentIdInInstance){\r
+ updateXimfHdrArrayByID(instanceId);\r
+ addColumn(istancedom_treecol[k],instanceId); // add DOM element to tree\r
+ addColumnHandler(instanceId); // load handler\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] instance " + instanceId + " created"); \r
+ //updateColumnToHide(); ???\r
+ }\r
+ }catch(e){\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] compute error - id = " + k + " : " + e); \r
+ }\r
+ }\r
+ \r
+ // used by Thunderbird to check for x-headers\r
+ addCustomPreferences('mailnews.customDBHeaders'); \r
+ \r
+ // load ilk array for Ximf values of tree cells\r
+ updateXimfIlkCustomColumnArray(currentInstance);\r
+ \r
+ // trace ilk array \r
+ var string = "";\r
+ for(xh in _ximfIlilkCustomColumnArray){\r
+ for(ilk in _ximfIlilkCustomColumnArray[xh]){\r
+ string += "["+ xh +"]["+ ilk +"]["+ _ximfIlilkCustomColumnArray[xh][ilk] + "]\n";\r
}\r
- } \r
- gCurrentIdentity.setCharAttribute("ximfmail_context_DBHeaders",prefList);\r
+ }\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] array of ilk of ximf value" + string); \r
+ return true; \r
+ }catch(e){ \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create] " + e +"\nline : " + e.lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ return false;\r
+ } \r
+ },\r
+ // delete all custom columns of XIMF headers\r
+ deleteXimfColummns : function(){ \r
+ $("treecol[ximfheadtree='1']").remove();\r
+ $("splitter[ximfheadtree='1']").remove(); \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:deleteXimfColummns ] delete all custom columns of XIMF headers"); \r
+ },\r
+ // attach customColumnHandler for all columns of XIMF headers\r
+ addCustomColumnHandler : function(){\r
+ var currentlistID = $("#threadCols treecol[ximfheadtree='1']");\r
+ for(var i =0 ; i < currentlistID.length ; ++i){ \r
+ addColumnHandler(); \r
}\r
- }catch(e){\r
- gConsole.logStringMessage("[ximfmail - createThreadTree ] " + e +"\nline : " + Error().lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
- } \r
- }; \r
- // loaded object\r
- XimfThreadTree.initialized = true;\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:addCustomColumnHandler ] attach customColumnHandler for all columns of XIMF headers"); \r
+ },\r
+ // get ilk array for Ximf values of tree cells\r
+ getIlkColumnArray : function(){ \r
+ return _ximfIlilkCustomColumnArray;\r
+ },\r
+ //obsolete?\r
+ saveColumnToHide : function(){\r
+ var listID = $("#threadCols treecol[ximfheadtree='1']");//\r
+ try{\r
+ if(gCurrentIdentity){ \r
+ prefList = ""\r
+ for(var i=0; i<listID.length; ++i){\r
+ if(listID[i].getAttribute("hidden") == "true"){\r
+ if(prefList != "") prefList +=",";\r
+ prefList += listID[i].id;\r
+ }\r
+ } \r
+ gCurrentIdentity.setCharAttribute("ximfmail_context_DBHeaders",prefList);\r
+ }\r
+ }catch(e){\r
+ gConsole.logStringMessage("[ximfmail - saveColumnToHide ] " + e +"\nline : " + Error().lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ }\r
+ }\r
+ } \r
}\r
-}
\ No newline at end of file
+ return{\r
+ getInstance : function(){\r
+ if(!instantiated){\r
+ instantiated = init();\r
+ }\r
+ return instantiated;\r
+ }\r
+ }; \r
+})(); // one shot on XimfThreadTree
\ No newline at end of file