home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / software / netscape62win / mail.xpi / bin / chrome / messenger.jar / content / messenger / am-offline.js < prev    next >
Text File  |  2001-09-17  |  13KB  |  339 lines

  1. /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  * The contents of this file are subject to the Netscape Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/NPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * 
  13.  * The Initial Developer of the Original Code is Netscape
  14.  * Communications Corporation. Portions created by Netscape are
  15.  * Copyright (C) 1998-2001 Netscape Communications Corporation. All
  16.  * Rights Reserved.
  17.  * 
  18.  * Contributors:
  19.  *   dianesun@netscape.com
  20.  */
  21.  
  22. var gIncomingServer;
  23. var gServerType;
  24. var gImapIncomingServer;
  25. var gPref = null;
  26. var gLockedPref = null;
  27.  
  28. function onInit() 
  29. {
  30.     onLockPreference();    
  31.  
  32.     // init values here
  33.     initServerSettings();
  34.     initRetentionSettings();
  35.     initDownloadSettings();
  36.  
  37.     onCheckItem("bc_notDownload", "offline.notDownload");
  38.     onCheckItem("bc_downloadMsg", "nntp.downloadMsg");
  39.     onCheckItem("bc_removeBody", "nntp.removeBody");
  40.     onCheckKeepMsg();
  41. }
  42.  
  43. function initServerSettings()
  44. {     
  45.  
  46.     document.getElementById("offline.notDownload").checked =  gIncomingServer.limitOfflineMessageSize;
  47.     if(gIncomingServer.maxMessageSize > 0)
  48.         document.getElementById("offline.notDownloadMin").setAttribute("value", gIncomingServer.maxMessageSize);
  49.     else
  50.         document.getElementById("offline.notDownloadMin").setAttribute("value", "50");
  51.  
  52.     if(gServerType == "imap") {
  53.         gImapIncomingServer = gIncomingServer.QueryInterface(Components.interfaces.nsIImapIncomingServer);
  54.         document.getElementById("offline.downloadBodiesOnGetNewMail").checked =  gImapIncomingServer.downloadBodiesOnGetNewMail;
  55.         document.getElementById("offline.newFolder").checked =  gImapIncomingServer.offlineDownload;
  56.     }
  57. }
  58.   
  59. function initRetentionSettings()
  60. {
  61.  
  62.     var retentionSettings =  gIncomingServer.retentionSettings; 
  63.  
  64.     document.getElementById("nntp.keepUnread").checked =  retentionSettings.keepUnreadMessagesOnly;
  65.     document.getElementById("nntp.removeBody").checked =  retentionSettings.cleanupBodiesByDays;
  66.     document.getElementById("nntp.keepMsg").setAttribute("value", retentionSettings.retainByPreference);
  67.     if(retentionSettings.daysToKeepHdrs > 0)
  68.         document.getElementById("nntp.keepOldMsgMin").setAttribute("value", retentionSettings.daysToKeepHdrs);
  69.     else
  70.         document.getElementById("nntp.keepOldMsgMin").setAttribute("value", "30");
  71.     if(retentionSettings.numHeadersToKeep > 0)
  72.         document.getElementById("nntp.keepNewMsgMin").setAttribute("value", retentionSettings.numHeadersToKeep);
  73.     else 
  74.         document.getElementById("nntp.keepNewMsgMin").setAttribute("value", "30");
  75.     if(retentionSettings.daysToKeepBodies > 0)
  76.         document.getElementById("nntp.removeBodyMin").setAttribute("value", retentionSettings.daysToKeepBodies);
  77.     else
  78.         document.getElementById("nntp.removeBodyMin").setAttribute("value", "30");
  79.  
  80.     switch(retentionSettings.retainByPreference)
  81.     {        
  82.         case 1:
  83.         document.getElementById("nntp.keepAllMsg").checked = true;    
  84.             break;
  85.         case 2:   
  86.         document.getElementById("nntp.keepOldMsg").checked = true;
  87.             break;
  88.         case 3:    
  89.         document.getElementById("nntp.keepNewMsg").checked = true;
  90.             break;
  91.         default:
  92.             document.getElementById("nntp.keepAllMsg").checked = true;
  93.     }  
  94. }
  95.  
  96.  
  97. function initDownloadSettings()
  98. {
  99.  
  100.     var downloadSettings =  gIncomingServer.downloadSettings;
  101.     document.getElementById("nntp.downloadMsg").checked = downloadSettings.downloadByDate;
  102.     document.getElementById("nntp.downloadUnread").checked = downloadSettings.downloadUnreadOnly;
  103.     if(downloadSettings.ageLimitOfMsgsToDownload > 0)
  104.         document.getElementById("nntp.downloadMsgMin").setAttribute("value", downloadSettings.ageLimitOfMsgsToDownload);
  105.     else
  106.         document.getElementById("nntp.downloadMsgMin").setAttribute("value", "30");
  107.  
  108. }
  109.  
  110.  
  111. function onPreInit(account, accountValues)
  112. {
  113.  
  114.     gServerType = getAccountValue(account, accountValues, "server", "type");
  115.     hideShowControls(gServerType);
  116.     gIncomingServer= account.incomingServer;
  117.     gIncomingServer.type = gServerType;
  118.  
  119.     var titleStringID;
  120.     // 10 is OFFLINE_SUPPORT_LEVEL_REGULAR, see nsIMsgIncomingServer.idl
  121.     // currently, there is no offline without diskspace
  122.     if (gIncomingServer.offlineSupportLevel >= 10) {
  123.       titleStringID = "prefPanel-offline-and-diskspace";
  124.     }
  125.     else {
  126.       titleStringID = "prefPanel-diskspace";
  127.     }
  128.  
  129.     var prefBundle = document.getElementById("bundle_prefs");
  130.     var headertitle = document.getElementById("headertitle");
  131.     headertitle.setAttribute('title',prefBundle.getString(titleStringID));
  132. }
  133.  
  134. function hideShowControls(type)
  135. {
  136.     
  137.     var controls = document.getElementsByAttribute("hidable", "true");
  138.     var len = controls.length;
  139.  
  140.     for (var i=0; i<len; i++) {
  141.         var control = controls[i];
  142.  
  143.         var hideFor = control.getAttribute("hidefor");
  144.  
  145.         if (!hideFor)
  146.             throw "this should not happen, things that are hidable should have hidefor set";
  147.  
  148.         var box = getEnclosingContainer(control);
  149.  
  150.         if (!box)
  151.             throw "this should not happen, things that are hidable should be in a box";
  152.  
  153.         // hide unsupported server type
  154.         // adding support for hiding multiple server types using hideFor="server1,server2"
  155.         var hideForBool = false;
  156.         var hideForTokens = hideFor.split(",");
  157.         for (var j = 0; j < hideForTokens.length; j++) {
  158.             if (hideForTokens[j] == type) {
  159.                 hideForBool = true;
  160.                 break;
  161.             }
  162.         }
  163.  
  164.         if (hideForBool) {
  165.             box.setAttribute("hidden", "true");
  166.         }
  167.         else {
  168.             box.removeAttribute("hidden");
  169.         }
  170.     }
  171. }
  172.  
  173. function getEnclosingContainer(startNode) {
  174.  
  175.     var parent = startNode;
  176.     var box;
  177.  
  178.     while (parent && parent != document) {
  179.  
  180.     var isContainer = (parent.getAttribute("iscontrolcontainer") == "true");
  181.  
  182.     if (!box || isContainer)
  183.         box=parent;
  184.  
  185.     // break out with a controlcontainer
  186.     if (isContainer)
  187.         break;
  188.     parent = parent.parentNode;
  189.     }
  190.  
  191.     return box;
  192. }
  193.  
  194.  
  195. function onClickSelect()
  196. {
  197.    
  198.     top.window.openDialog("chrome://messenger/content/msgSelectOffline.xul", "", "centerscreen,chrome,modal,titlebar,resizable=yes");
  199.     return true;
  200.  
  201. }
  202.  
  203. function onSave()
  204. {
  205.  
  206.     var retentionSettings = new Array;
  207.     var downloadSettings = new Array;
  208.  
  209.     gIncomingServer.limitOfflineMessageSize = document.getElementById("offline.notDownload").checked;
  210.     gIncomingServer.maxMessageSize = document.getElementById("offline.notDownloadMin").value;
  211.  
  212.     if(document.getElementById("nntp.keepAllMsg").checked)
  213.         retentionSettings.retainByPreference = 1;        
  214.     else if(document.getElementById("nntp.keepOldMsg").checked)
  215.         retentionSettings.retainByPreference = 2;
  216.     else if(document.getElementById("nntp.keepNewMsg").checked)
  217.         retentionSettings.retainByPreference = 3;
  218.  
  219.     document.getElementById("nntp.keepMsg").value = retentionSettings.retainByPreference;
  220.     retentionSettings.daysToKeepHdrs = document.getElementById("nntp.keepOldMsgMin").value;
  221.     retentionSettings.daysToKeepBodies = document.getElementById("nntp.removeBodyMin").value;
  222.     retentionSettings.numHeadersToKeep = document.getElementById("nntp.keepNewMsgMin").value;
  223.     retentionSettings.keepUnreadMessagesOnly = document.getElementById("nntp.keepUnread").checked;
  224.     retentionSettings.cleanupBodiesByDays = document.getElementById("nntp.removeBody").checked;
  225.  
  226.     downloadSettings.downloadByDate = document.getElementById("nntp.downloadMsg").checked;
  227.     downloadSettings.downloadUnreadOnly = document.getElementById("nntp.downloadUnread").checked;
  228.     downloadSettings.ageLimitOfMsgsToDownload = document.getElementById("nntp.downloadMsgMin").value;
  229.  
  230.     gIncomingServer.retentionSettings = retentionSettings;
  231.     gIncomingServer.downloadSettings = downloadSettings;
  232.  
  233.     if (gImapIncomingServer) {
  234.         gImapIncomingServer.downloadBodiesOnGetNewMail = document.getElementById("offline.downloadBodiesOnGetNewMail").checked;
  235.         gImapIncomingServer.offlineDownload = document.getElementById("offline.newFolder").checked;
  236.     }
  237. }
  238.  
  239. // Does the work of disabling an element given the array which contains xul id/prefstring pairs.
  240. // Also saves the id/locked state in an array so that other areas of the code can avoid
  241. // stomping on the disabled state indiscriminately.
  242. function disableIfLocked( prefstrArray )
  243. {
  244.     if (!gLockedPref)
  245.       gLockedPref = new Array;
  246.  
  247.     for (i=0; i<prefstrArray.length; i++) {
  248.         var id = prefstrArray[i].id;
  249.         var element = document.getElementById(id);
  250.         if (gPref.prefIsLocked(prefstrArray[i].prefstring)) {
  251.             element.disabled = true;
  252.             gLockedPref[id] = true;
  253.         } else {
  254.             element.removeAttribute("disabled");
  255.             gLockedPref[id] = false;
  256.         }
  257.     }
  258. }
  259.  
  260. // Disables xul elements that have associated preferences locked.
  261. function onLockPreference()
  262. {
  263.     var isDownloadLocked = false;
  264.     var isGetNewLocked = false;
  265.     var initPrefString = "mail.server"; 
  266.     var finalPrefString; 
  267.  
  268.     var prefService = Components.classes["@mozilla.org/preferences-service;1"];
  269.     prefService = prefService.getService();
  270.     prefService = prefService.QueryInterface(Components.interfaces.nsIPrefService);
  271.  
  272.     // This panel does not use the code in AccountManager.js to handle
  273.     // the load/unload/disable.  keep in mind new prefstrings and changes
  274.     // to code in AccountManager, and update these as well.
  275.     var allPrefElements = [
  276.       { prefstring:"offline_download", id:"offline.newFolder"},
  277.       { prefstring:"download_bodies_on_get_new_mail",
  278.                            id:"offline.downloadBodiesOnGetNewMail"},
  279.       { prefstring:"limit_offline_message_size", id:"offline.notDownload"},
  280.       { prefstring:"max_size", id:"offline.notDownloadMin"},
  281.       { prefstring:"downloadUnreadOnly", id:"nntp.downloadUnread"},
  282.       { prefstring:"downloadByDate", id:"nntp.downloadMsg"},
  283.       { prefstring:"ageLimit", id:"nntp.downloadMsgMin"},
  284.       { prefstring:"retainBy", id:"nntp.keepMsg"},
  285.       { prefstring:"daysToKeepHdrs", id:"nntp.keepOldMsgMin"},
  286.       { prefstring:"numHdrsToKeep", id:"nntp.keepNewMsgMin"},
  287.       { prefstring:"keepUnreadOnly", id:"nntp.keepUnread"},
  288.       { prefstring:"daysToKeepBodies", id:"nntp.removeBodyMin"},
  289.       { prefstring:"cleanupBodies", id:"nntp.removeBody" },
  290.       { prefstring:"disable_button.selectFolder", id:"selectFolderButton"}
  291.     ];
  292.  
  293.     finalPrefString = initPrefString + "." + gIncomingServer.key + ".";
  294.     gPref = prefService.getBranch(finalPrefString);
  295.  
  296.     disableIfLocked( allPrefElements );
  297.  
  298. function onCheckItem(broadcasterElementId, checkElementId)
  299. {
  300.     var broadcaster = document.getElementById(broadcasterElementId);
  301.     var checked = document.getElementById(checkElementId).checked;
  302.     if(checked && !gLockedPref[checkElementId] ) {
  303.         broadcaster.removeAttribute("disabled");
  304.     }
  305.     else {
  306.         broadcaster.setAttribute("disabled", "true");
  307.     }
  308.  
  309.  
  310. function onCheckKeepMsg()
  311. {
  312.     if (gLockedPref["nntp.keepMsg"]) {
  313.         // if the pref associated with the radiobutton is locked, as indicated
  314.         // by the gLockedPref, skip this function.  All elements in this
  315.         // radiogroup have been locked by the function onLockPreference.
  316.         return;
  317.     }
  318.     var broadcaster_keepMsg = document.getElementById("bc_keepMsg");
  319.     var checkedOld = document.getElementById("nntp.keepOldMsg").checked;
  320.     var checkedNew = document.getElementById("nntp.keepNewMsg").checked;
  321.     var checkedAll = document.getElementById("nntp.keepAllMsg").checked;
  322.     if(checkedAll) {
  323.         broadcaster_keepMsg.setAttribute("disabled", "true");
  324.     }
  325.     else if(checkedOld) {
  326.         document.getElementById("nntp.keepOldMsgMin").removeAttribute("disabled");
  327.         document.getElementById("nntp.keepNewMsgMin").setAttribute("disabled", "true");
  328.     }
  329.     else if(checkedNew) {
  330.         document.getElementById("nntp.keepNewMsgMin").removeAttribute("disabled");
  331.         document.getElementById("nntp.keepOldMsgMin").setAttribute("disabled", "true");
  332.     }
  333.  
  334.  
  335. }
  336.  
  337.