home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / software / netscape62win / mail.xpi / bin / chrome / messenger.jar / content / messenger / folderProps.js < prev    next >
Text File  |  2001-07-03  |  6KB  |  196 lines

  1. var gMsgFolder;
  2. var gServerTypeFolder = null;
  3. var gPreselectedFolderURI = null;
  4. var gParentMsgWindow = null;
  5.  
  6. // services used
  7. var RDF;
  8.  
  9. // corresponds to MSG_FOLDER_FLAG_OFFLINE
  10. const MSG_FOLDER_FLAG_OFFLINE = 0x8000000
  11.  
  12. function folderPropsOKButtonCallback()
  13. {
  14.   if (gMsgFolder)
  15.   {
  16.  
  17.     // set charset attributes
  18.     var folderCharsetList = document.getElementById("folderCharsetList");
  19.     gMsgFolder.charset = folderCharsetList.getAttribute("value");
  20.     gMsgFolder.charsetOverride = document.getElementById("folderCharsetOverride").checked;
  21.  
  22.     if(document.getElementById("offline.selectForOfflineFolder").checked ||
  23.       document.getElementById("offline.selectForOfflineNewsgroup").checked)
  24.       gMsgFolder.setFlag(MSG_FOLDER_FLAG_OFFLINE);
  25.     else
  26.       gMsgFolder.clearFlag(MSG_FOLDER_FLAG_OFFLINE);
  27.   }
  28.   window.close();
  29. }
  30.  
  31. function folderPropsOnLoad()
  32. {
  33.   dump("folder props loaded"+'\n');
  34.   doSetOKCancel(folderPropsOKButtonCallback);
  35.   moveToAlertPosition();
  36.  
  37.   RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
  38.  
  39.   // look in arguments[0] for parameters
  40.   if (window.arguments && window.arguments[0]) {
  41.     if ( window.arguments[0].title ) {
  42.       top.window.title = window.arguments[0].title;
  43.     }
  44.     if ( window.arguments[0].okCallback ) {
  45.       top.okCallback = window.arguments[0].okCallback;
  46.     }
  47.   }
  48.  
  49.   // fill in folder name, based on what they selected in the folder pane
  50.   if (window.arguments[0].preselectedURI) {
  51.     try {
  52.       gPreselectedFolderURI = window.arguments[0].preselectedURI;
  53.     }
  54.     catch (ex) {
  55.     }
  56.   }
  57.   else {
  58.     dump("passed null for preselectedURI, do nothing\n");
  59.   }
  60.  
  61.   if(window.arguments[0].name)
  62.   {
  63.     var name = document.getElementById("name");
  64.     name.value = window.arguments[0].name;
  65.  
  66. //  name.setSelectionRange(0,-1);
  67. //  name.focusTextField();
  68.   }
  69.  
  70.   gServerTypeFolder = window.arguments[0].serverType;
  71.  
  72.   dump("preselectfolder uri = "+gPreselectedFolderURI+'\n');
  73.   dump("serverType = "+gServerTypeFolder+'\n');
  74.  
  75.   if (window.arguments && window.arguments[0]) {
  76.     if (window.arguments[0].msgWindow) {
  77.       gParentMsgWindow = window.arguments[0].msgWindow;
  78.     }
  79.   }
  80.  
  81.   // this hex value come from nsMsgFolderFlags.h
  82.   var folderResource = RDF.GetResource(gPreselectedFolderURI);
  83.     
  84.   if(folderResource)
  85.     gMsgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
  86.   if (!gMsgFolder)
  87.     dump("no gMsgFolder preselectfolder uri = "+gPreselectedFolderURI+'\n');
  88.  
  89.   if (gMsgFolder) {
  90.     if (gMsgFolder.flags & MSG_FOLDER_FLAG_OFFLINE) {
  91.  
  92.       if(gServerTypeFolder == "imap" || gServerTypeFolder == "pop3")
  93.         document.getElementById("offline.selectForOfflineFolder").checked = true;
  94.  
  95.       if(gServerTypeFolder == "nntp")
  96.         document.getElementById("offline.selectForOfflineNewsgroup").checked = true;
  97.     }
  98.     else {
  99.       if(gServerTypeFolder == "imap" || gServerTypeFolder == "pop3")
  100.         document.getElementById("offline.selectForOfflineFolder").checked = false;
  101.  
  102.       if(gServerTypeFolder == "nntp")
  103.         document.getElementById("offline.selectForOfflineNewsgroup").checked = false;
  104.     }
  105.  
  106.     // get charset title (i.e. localized name), needed in order to set value for the menu
  107.     var ccm = Components.classes['@mozilla.org/charset-converter-manager;1'];
  108.     ccm = ccm.getService();
  109.     ccm = ccm.QueryInterface(Components.interfaces.nsICharsetConverterManager2);
  110.     // get a localized string
  111.     var charsetTitle = ccm.GetCharsetTitle(ccm.GetCharsetAtom(gMsgFolder.charset));
  112.  
  113.     // select the menu item 
  114.     var folderCharsetList = document.getElementById("folderCharsetList");
  115.     folderCharsetList.setAttribute("label", charsetTitle);
  116.     folderCharsetList.setAttribute("value", gMsgFolder.charset);
  117.  
  118.     // set override checkbox
  119.     document.getElementById("folderCharsetOverride").checked = gMsgFolder.charsetOverride;
  120.   }
  121.  
  122.   // select the initial tab
  123.   if (window.arguments[0].tabID) {
  124.     // set index for starting panel on the <tabpanel> element
  125.     var folderPropTabPanel = document.getElementById("folderPropTabPanel");
  126.     folderPropTabPanel.setAttribute("index", window.arguments[0].tabIndex);
  127.  
  128.     try {
  129.       var tab = document.getElementById(window.arguments[0].tabID);
  130.       tab.setAttribute("selected", "true");
  131.     }
  132.     catch (ex) {}
  133.   }
  134.   hideShowControls(gServerTypeFolder);
  135. }
  136.  
  137. function hideShowControls(serverType)
  138. {
  139.   var controls = document.getElementsByAttribute("hidable", "true");
  140.   var len = controls.length;
  141.   for (var i=0; i<len; i++) {
  142.     var control = controls[i];
  143.     var hideFor = control.getAttribute("hidefor");
  144.     if (!hideFor)
  145.       throw "this should not happen, things that are hidable should have hidefor set";
  146.  
  147.     var box = getEnclosingContainer(control);
  148.  
  149.     if (!box)
  150.       throw "this should not happen, things that are hidable should be in a box";
  151.  
  152.     // hide unsupported server type
  153.     // adding support for hiding multiple server types using hideFor="server1,server2"
  154.     var hideForBool = false;
  155.     var hideForTokens = hideFor.split(",");
  156.     for (var j = 0; j < hideForTokens.length; j++) {
  157.       if (hideForTokens[j] == serverType) {
  158.         hideForBool = true;
  159.         break;
  160.       }
  161.     }
  162.  
  163.     if (hideForBool) {
  164.       box.setAttribute("hidden", "true");
  165.     }
  166.     else {
  167.       box.removeAttribute("hidden");
  168.     }
  169.   }
  170. }
  171.  
  172. function getEnclosingContainer(startNode) 
  173. {
  174.   var parent = startNode;
  175.   var box; 
  176.   while (parent && parent != document) 
  177.   {
  178.     var isContainer = (parent.getAttribute("iscontrolcontainer") == "true");
  179.  
  180.     // remember the FIRST container we encounter, or the first controlcontainer
  181.     if (!box || isContainer) box=parent;
  182.         
  183.     // break out with a controlcontainer
  184.     if (isContainer) break;
  185.       parent = parent.parentNode;
  186.   }
  187.   return box;
  188. }
  189.  
  190. function onOfflineFolderDownload()
  191. {
  192.   // we need to create a progress window and pass that in as the second parameter here.
  193.   gMsgFolder.downloadAllForOffline(null, gParentMsgWindow);
  194. }
  195.  
  196.