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

source: content/prefDialog/vI_prefDialog_FolderPicker.js @ 184c6c

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

rearranged tree structure / added build-script

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