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

source: content/prefDialog/vI_prefDialog_FolderPicker.js @ 509348

ng_0.9
Last change on this file since 509348 was 509348, checked in by rene <rene@…>, 8 years ago

code formatting (no code changes)

  • Property mode set to 100644
File size: 14.8 KB
Line 
1/**
2 * some code copied and adapted from Thunderbird Sources
3 * thanks to all Thunderbird Developers
4 */
5
6/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
7 * ***** BEGIN LICENSE BLOCK *****
8 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
9 *
10 * The contents of this file are subject to the Mozilla Public License Version
11 * 1.1 (the "License"); you may not use this file except in compliance with
12 * the License. You may obtain a copy of the License at
13 * http://www.mozilla.org/MPL/
14 *
15 * Software distributed under the License is distributed on an "AS IS" basis,
16 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
17 * for the specific language governing rights and limitations under the
18 * License.
19 *
20 * The Original Code is Mozilla Communicator client code, released
21 * March 31, 1998.
22 *
23 * The Initial Developer of the Original Code is
24 * Netscape Communications Corporation.
25 * Portions created by the Initial Developer are Copyright (C) 1998-1999
26 * the Initial Developer. All Rights Reserved.
27 *
28 * Contributor(s):
29 *
30 * Alternatively, the contents of this file may be used under the terms of
31 * either of the GNU General Public License Version 2 or later (the "GPL"),
32 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
33 * in which case the provisions of the GPL or the LGPL are applicable instead
34 * of those above. If you wish to allow use of your version of this file only
35 * under the terms of either the GPL or the LGPL, and not to allow others to
36 * use your version of this file under the terms of the MPL, indicate your
37 * decision by deleting the provisions above and replace them with the notice
38 * and other provisions required by the GPL or the LGPL. If you do not delete
39 * the provisions above, a recipient may use your version of this file under
40 * the terms of any one of the MPL, the GPL or the LGPL.
41 *
42 * ***** END LICENSE BLOCK ***** */
43
44Components.utils.import("resource://v_identity/vI_nameSpaceWrapper.js");
45virtualIdentityExtension.ns(function () {
46  with(virtualIdentityExtension.LIB) {
47
48    var gFccRadioElemChoice, gDraftsRadioElemChoice, gTmplRadioElemChoice;
49    var gFccRadioElemChoiceLocked, gDraftsRadioElemChoiceLocked, gTmplRadioElemChoiceLocked;
50    var gDefaultPickerMode = "3";
51
52    var gFccFolderWithDelim, gDraftsFolderWithDelim, gTemplatesFolderWithDelim;
53
54    // Picker IDs
55    var fccAccountPickerId = "msgFccAccountPicker";
56    var fccFolderPickerId = "msgFccFolderPicker";
57    var draftsAccountPickerId = "msgDraftsAccountPicker";
58    var draftsFolderPickerId = "msgDraftsFolderPicker";
59    var tmplAccountPickerId = "msgStationeryAccountPicker";
60    var tmplFolderPickerId = "msgStationeryFolderPicker";
61
62    var _GetMsgFolderFromUri = function (uri, checkFolderAttributes) {
63      let msgfolder = null;
64      if (typeof MailUtils != 'undefined') {
65        return MailUtils.getFolderForURI(uri, checkFolderAttributes);
66      }
67      try { // Postbox
68        let resource = GetResourceFromUri(uri);
69        msgfolder = resource.QueryInterface(Components.interfaces.nsIMsgFolder);
70        if (checkFolderAttributes) {
71          if (!(msgfolder && (msgfolder.parent || msgfolder.isServer))) {
72            msgfolder = null;
73          }
74        }
75      } catch (ex) {
76        //dump("failed to get the folder resource\n");
77      }
78      return msgfolder;
79    }
80
81    var setDefaultCopiesAndFoldersPrefs = function (identity, server, accountData) {
82      var am = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager);
83      var rootFolder = am.defaultAccount.incomingServer.rootFolder
84
85      var fccElement = document.getElementById("VIdent_identity.fccFolder")
86      var fccElementValue = fccElement.getAttribute("value");
87      if (!fccElementValue || !GetMsgFolderFromUri(fccElementValue, false))
88        fccElement.setAttribute("value", rootFolder.server.serverURI + gFccFolderWithDelim)
89
90      var draftElement = document.getElementById("VIdent_identity.draftFolder")
91      var draftElementValue = draftElement.getAttribute("value");
92      if (!draftElementValue || !GetMsgFolderFromUri(draftElementValue, false))
93        draftElement.setAttribute("value", rootFolder.server.serverURI + gDraftsFolderWithDelim)
94
95      var stationeryElement = document.getElementById("VIdent_identity.stationeryFolder")
96      var stationeryElementValue = stationeryElement.getAttribute("value");
97      if (!stationeryElementValue || !GetMsgFolderFromUri(stationeryElementValue, false))
98        stationeryElement.setAttribute("value", rootFolder.server.serverURI + gTemplatesFolderWithDelim)
99    }
100
101
102    var onInitCopiesAndFolders = function () {
103      SetSpecialFolderNamesWithDelims();
104      SetGlobalRadioElemChoices();
105
106      setDefaultCopiesAndFoldersPrefs();
107
108      SetFolderDisplay(gFccRadioElemChoice, gFccRadioElemChoiceLocked,
109        "VIdent_fcc",
110        fccAccountPickerId,
111        "VIdent_identity.fccFolder",
112        fccFolderPickerId);
113
114      SetFolderDisplay(gDraftsRadioElemChoice, gDraftsRadioElemChoiceLocked,
115        "VIdent_draft",
116        draftsAccountPickerId,
117        "VIdent_identity.draftFolder",
118        draftsFolderPickerId);
119
120      SetFolderDisplay(gTmplRadioElemChoice, gTmplRadioElemChoiceLocked,
121        "VIdent_tmpl",
122        tmplAccountPickerId,
123        "VIdent_identity.stationeryFolder",
124        tmplFolderPickerId);
125
126      setupFccItems();
127    }
128
129    // Initialize the picker mode choices (account/folder picker) into global vars
130    var SetGlobalRadioElemChoices = function () {
131      var pickerModeElement = document.getElementById("VIdent_identity.fccFolderPickerMode");
132      gFccRadioElemChoice = pickerModeElement.getAttribute("value");
133      gFccRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
134      if (!gFccRadioElemChoice) gFccRadioElemChoice = gDefaultPickerMode;
135
136      pickerModeElement = document.getElementById("VIdent_identity.draftFolderPickerMode");
137      gDraftsRadioElemChoice = pickerModeElement.getAttribute("value");
138      gDraftsRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
139      if (!gDraftsRadioElemChoice) gDraftsRadioElemChoice = gDefaultPickerMode;
140
141      pickerModeElement = document.getElementById("VIdent_identity.stationeryFolderPickerMode");
142      gTmplRadioElemChoice = pickerModeElement.getAttribute("value");
143      gTmplRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
144      if (!gTmplRadioElemChoice) gTmplRadioElemChoice = gDefaultPickerMode;
145    }
146
147    /*
148     * Set Account and Folder elements based on the values read from
149     * preferences file. Default picker mode, if none specified at this stage, is
150     * set to 1 i.e., Other picker displaying the folder value read from the
151     * preferences file.
152     */
153    var SetFolderDisplay = function (pickerMode, disableMode,
154      radioElemPrefix,
155      accountPickerId,
156      folderPickedField,
157      folderPickerId) {
158      if (!pickerMode)
159        pickerMode = gDefaultPickerMode;
160
161      var selectAccountRadioId = radioElemPrefix + "_selectAccount";
162      var selectAccountRadioElem = document.getElementById(selectAccountRadioId);
163      var selectFolderRadioId = radioElemPrefix + "_selectFolder";
164      var selectFolderRadioElem = document.getElementById(selectFolderRadioId);
165      var accountPicker = document.getElementById(accountPickerId);
166      var folderPicker = document.getElementById(folderPickerId);
167      var rg = selectAccountRadioElem.radioGroup;
168
169      var folderPickedElement = document.getElementById(folderPickedField);
170      var uri = folderPickedElement.getAttribute("value");
171      // Get message folder from the given uri. Second argument (false) siginifies
172      // that there is no need to check for the existence of special folders as
173      // these folders are created on demand at runtime in case of imap accounts.
174      // For POP3 accounts, special folders are created at the account creation time.
175      var msgFolder = GetMsgFolderFromUri(uri, false);
176      vI.InitFolderDisplays(msgFolder, accountPickerId, folderPickerId)
177
178      switch (pickerMode) {
179      case "0":
180        rg.selectedItem = selectAccountRadioElem;
181        SetPickerEnabling(accountPickerId, folderPickerId);
182        break;
183
184      case "1":
185        rg.selectedItem = selectFolderRadioElem;
186        SetPickerEnabling(folderPickerId, accountPickerId);
187        break;
188      case "2":
189        rg.selectedItem = document.getElementById(radioElemPrefix + "_Settings_Of_Default");
190        folderPicker.setAttribute("disabled", "true");
191        accountPicker.setAttribute("disabled", "true");
192        break;
193      case "3":
194        rg.selectedItem = document.getElementById(radioElemPrefix + "_Settings_Of_Account");
195        folderPicker.setAttribute("disabled", "true");
196        accountPicker.setAttribute("disabled", "true");
197        break;
198
199      default:
200        alert("Error in setting initial folder display on pickers\n");
201        break;
202      }
203
204      // Check to see if we need to lock page elements. Disable radio buttons
205      // and account/folder pickers when locked.
206      if (disableMode) {
207        selectAccountRadioElem.setAttribute("disabled", "true");
208        selectFolderRadioElem.setAttribute("disabled", "true");
209        accountPicker.setAttribute("disabled", "true");
210        folderPicker.setAttribute("disabled", "true");
211      }
212    }
213
214    // Need to append special folders when account picker is selected.
215    // Create a set of global special folder vars to be suffixed to the
216    // server URI of the selected account.
217    var SetSpecialFolderNamesWithDelims = function () {
218      var folderDelim = "/";
219      /* we use internal names known to everyone like "Sent", "Templates" and "Drafts" */
220
221      gFccFolderWithDelim = folderDelim + "Sent";
222      gDraftsFolderWithDelim = folderDelim + "Drafts";
223      gTemplatesFolderWithDelim = folderDelim + "Templates";
224    }
225
226    var onSaveCopiesAndFolders = function () {
227      vI.SaveFolderSettings(gFccRadioElemChoice,
228        "doFcc",
229        gFccFolderWithDelim,
230        fccAccountPickerId,
231        fccFolderPickerId,
232        "VIdent_identity.fccFolder",
233        "VIdent_identity.fccFolderPickerMode");
234
235      vI.SaveFolderSettings(gDraftsRadioElemChoice,
236        "messageDrafts",
237        gDraftsFolderWithDelim,
238        draftsAccountPickerId,
239        draftsFolderPickerId,
240        "VIdent_identity.draftFolder",
241        "VIdent_identity.draftFolderPickerMode");
242
243      vI.SaveFolderSettings(gTmplRadioElemChoice,
244        "messageTemplates",
245        gTemplatesFolderWithDelim,
246        tmplAccountPickerId,
247        tmplFolderPickerId,
248        "VIdent_identity.stationeryFolder",
249        "VIdent_identity.stationeryFolderPickerMode");
250    }
251
252    // Check the Fcc Self item and setup associated picker state
253    var setupFccItems = function () {
254      var broadcaster = document.getElementById("VIdent_broadcaster_doFcc");
255
256      var checked = document.getElementById("VIdent_identity.doFcc").checked;
257      if (checked) {
258        broadcaster.removeAttribute("disabled");
259        SetupFccPickerState(gFccRadioElemChoice,
260          fccAccountPickerId,
261          fccFolderPickerId);
262      } else
263        broadcaster.setAttribute("disabled", "true");
264    }
265
266    // Set up picker settings for Sent Folder
267    var SetupFccPickerState = function (pickerMode, accountPickerId, folderPickerId) {
268      switch (pickerMode) {
269      case "0":
270        if (!gFccRadioElemChoiceLocked)
271          SetPickerEnabling(accountPickerId, folderPickerId);
272        SetRadioButtons("VIdent_fcc_selectAccount", "VIdent_fcc_selectFolder");
273        break;
274
275      case "1":
276        if (!gFccRadioElemChoiceLocked)
277          SetPickerEnabling(folderPickerId, accountPickerId);
278        SetRadioButtons("VIdent_fcc_selectFolder", "VIdent_fcc_selectAccount");
279        break;
280
281      default:
282        document.getElementById(folderPickerId).setAttribute("disabled", "true");
283        document.getElementById(accountPickerId).setAttribute("disabled", "true");
284        break;
285      }
286    }
287
288    // Enable and disable pickers based on the radio element clicked
289    var SetPickerEnabling = function (enablePickerId, disablePickerId) {
290      var activePicker = document.getElementById(enablePickerId);
291      activePicker.removeAttribute("disabled");
292
293      var inactivePicker = document.getElementById(disablePickerId);
294      inactivePicker.setAttribute("disabled", "true");
295    }
296
297    // Set radio element choices and picker states
298    var setPickersState = function (enablePickerId, disablePickerId, event) {
299      SetPickerEnabling(enablePickerId, disablePickerId);
300
301      var radioElemValue = event.target.value;
302
303      switch (event.target.id) {
304      case "VIdent_fcc_Settings_Of_Account":
305      case "VIdent_fcc_Settings_Of_Default":
306        document.getElementById(enablePickerId).setAttribute("disabled", "true");
307      case "VIdent_fcc_selectAccount":
308      case "VIdent_fcc_selectFolder":
309        gFccRadioElemChoice = radioElemValue;
310        break;
311      case "VIdent_draft_Settings_Of_Account":
312      case "VIdent_draft_Settings_Of_Default":
313        document.getElementById(enablePickerId).setAttribute("disabled", "true");
314      case "VIdent_draft_selectAccount":
315      case "VIdent_draft_selectFolder":
316        gDraftsRadioElemChoice = radioElemValue;
317        break;
318      case "VIdent_tmpl_Settings_Of_Account":
319      case "VIdent_tmpl_Settings_Of_Default":
320        document.getElementById(enablePickerId).setAttribute("disabled", "true");
321      case "VIdent_tmpl_selectFolder":
322      case "VIdent_tmpl_selectAccount":
323        gTmplRadioElemChoice = radioElemValue;
324        break;
325      default:
326        alert("Error in setting picker state. " + event.target.id + "\n");
327        return;
328      }
329
330      switch (event.target.id) {
331      case "VIdent_fcc_Settings_Of_Account":
332      case "VIdent_fcc_Settings_Of_Default":
333        document.getElementById("VIdent_identity.fccReplyFollowsParent").setAttribute("disabled", "true");
334        break;
335      case "VIdent_fcc_selectAccount":
336      case "VIdent_fcc_selectFolder":
337        document.getElementById("VIdent_identity.fccReplyFollowsParent").removeAttribute("disabled")
338        break;
339      }
340    }
341
342    // This routine is to restore the correct radio element
343    // state when the fcc self checkbox broadcasts the change
344    var SetRadioButtons = function (selectPickerId, unselectPickerId) {
345      var activeRadioElem = document.getElementById(selectPickerId);
346      activeRadioElem.radioGroup.selectedItem = activeRadioElem;
347    }
348    vI.onInitCopiesAndFolders = onInitCopiesAndFolders;
349    vI.onSaveCopiesAndFolders = onSaveCopiesAndFolders;
350    vI.setPickersState = setPickersState;
351    vI.gFccRadioElemChoice = gFccRadioElemChoice;
352    vI.gDraftsRadioElemChoice = gDraftsRadioElemChoice;
353    vI.gTmplRadioElemChoice = gTmplRadioElemChoice;
354
355    // patch for https://bugzilla.mozilla.org/show_bug.cgi?id=889022, see there
356    Components.utils.import("resource:///modules/MailUtils.js");
357    if (typeof (GetMsgFolderFromUri) != "function") {
358      var GetMsgFolderFromUri = _GetMsgFolderFromUri;
359    }
360
361  }
362});
Note: See TracBrowser for help on using the repository browser.