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

source: content/prefDialog/vI_prefDialog_FolderPicker.js @ e93346

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

bugfix for folderpicker

  • Property mode set to 100644
File size: 14.0 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
45Components.utils.import("resource://v_identity/vI_nameSpaceWrapper.js");
46virtualIdentityExtension.ns(function() { with (virtualIdentityExtension.LIB) {
47
48var gFccRadioElemChoice, gDraftsRadioElemChoice, gTmplRadioElemChoice;
49var gFccRadioElemChoiceLocked, gDraftsRadioElemChoiceLocked, gTmplRadioElemChoiceLocked;
50var gDefaultPickerMode = "3";
51
52var gFccFolderWithDelim, gDraftsFolderWithDelim, gTemplatesFolderWithDelim;
53
54// Picker IDs
55var fccAccountPickerId = "msgFccAccountPicker";
56var fccFolderPickerId = "msgFccFolderPicker";
57var draftsAccountPickerId = "msgDraftsAccountPicker";
58var draftsFolderPickerId = "msgDraftsFolderPicker";
59var tmplAccountPickerId = "msgStationeryAccountPicker";
60var tmplFolderPickerId = "msgStationeryFolderPicker";
61
62function setDefaultCopiesAndFoldersPrefs(identity, server, accountData)
63{
64    var am = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager);
65    var rootFolder = am.defaultAccount.incomingServer.rootFolder
66
67    var fccElement = document.getElementById("VIdent_identity.fccFolder")
68    var fccElementValue = fccElement.getAttribute("value");
69    if (!fccElementValue || !GetMsgFolderFromUri(fccElementValue, false))
70        fccElement.setAttribute("value", rootFolder.server.serverURI + gFccFolderWithDelim)
71
72    var draftElement = document.getElementById("VIdent_identity.draftFolder")
73    var draftElementValue = draftElement.getAttribute("value");
74    if (!draftElementValue || !GetMsgFolderFromUri(draftElementValue, false))
75        draftElement.setAttribute("value", rootFolder.server.serverURI + gDraftsFolderWithDelim)
76
77    var stationeryElement = document.getElementById("VIdent_identity.stationeryFolder")
78    var stationeryElementValue = stationeryElement.getAttribute("value");
79    if (!stationeryElementValue || !GetMsgFolderFromUri(stationeryElementValue, false))
80        stationeryElement.setAttribute("value", rootFolder.server.serverURI + gTemplatesFolderWithDelim)
81}
82
83
84function onInitCopiesAndFolders()
85{
86    SetSpecialFolderNamesWithDelims();
87    SetGlobalRadioElemChoices();
88
89    setDefaultCopiesAndFoldersPrefs();
90
91    SetFolderDisplay(gFccRadioElemChoice, gFccRadioElemChoiceLocked, 
92                     "VIdent_fcc", 
93                     fccAccountPickerId, 
94                     "VIdent_identity.fccFolder", 
95                     fccFolderPickerId);
96
97    SetFolderDisplay(gDraftsRadioElemChoice, gDraftsRadioElemChoiceLocked, 
98                     "VIdent_draft", 
99                     draftsAccountPickerId, 
100                     "VIdent_identity.draftFolder", 
101                     draftsFolderPickerId);
102
103    SetFolderDisplay(gTmplRadioElemChoice, gTmplRadioElemChoiceLocked, 
104                     "VIdent_tmpl", 
105                     tmplAccountPickerId, 
106                     "VIdent_identity.stationeryFolder", 
107                     tmplFolderPickerId);
108
109    setupFccItems();
110}
111
112// Initialize the picker mode choices (account/folder picker) into global vars
113function SetGlobalRadioElemChoices()
114{
115    var pickerModeElement = document.getElementById("VIdent_identity.fccFolderPickerMode");
116    gFccRadioElemChoice = pickerModeElement.getAttribute("value");
117    gFccRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
118    if (!gFccRadioElemChoice) gFccRadioElemChoice = gDefaultPickerMode;
119
120    pickerModeElement = document.getElementById("VIdent_identity.draftFolderPickerMode");
121    gDraftsRadioElemChoice = pickerModeElement.getAttribute("value");
122    gDraftsRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
123    if (!gDraftsRadioElemChoice) gDraftsRadioElemChoice = gDefaultPickerMode;
124
125    pickerModeElement = document.getElementById("VIdent_identity.stationeryFolderPickerMode");
126    gTmplRadioElemChoice = pickerModeElement.getAttribute("value");
127    gTmplRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
128    if (!gTmplRadioElemChoice) gTmplRadioElemChoice = gDefaultPickerMode;
129}
130
131/*
132 * Set Account and Folder elements based on the values read from
133 * preferences file. Default picker mode, if none specified at this stage, is
134 * set to 1 i.e., Other picker displaying the folder value read from the
135 * preferences file.
136 */
137function SetFolderDisplay(pickerMode, disableMode,
138                          radioElemPrefix, 
139                          accountPickerId, 
140                          folderPickedField, 
141                          folderPickerId)
142{
143    if (!pickerMode)
144        pickerMode = gDefaultPickerMode;
145
146    var selectAccountRadioId = radioElemPrefix + "_selectAccount";
147    var selectAccountRadioElem = document.getElementById(selectAccountRadioId);
148    var selectFolderRadioId = radioElemPrefix + "_selectFolder";
149    var selectFolderRadioElem = document.getElementById(selectFolderRadioId);
150    var accountPicker = document.getElementById(accountPickerId);
151    var folderPicker = document.getElementById(folderPickerId);
152    var rg = selectAccountRadioElem.radioGroup;
153
154    var folderPickedElement = document.getElementById(folderPickedField);
155    var uri = folderPickedElement.getAttribute("value");
156    // Get message folder from the given uri. Second argument (false) siginifies
157    // that there is no need to check for the existence of special folders as
158    // these folders are created on demand at runtime in case of imap accounts.
159    // For POP3 accounts, special folders are created at the account creation time.
160    var msgFolder = GetMsgFolderFromUri(uri, false);
161    vI.InitFolderDisplays(msgFolder, accountPickerId, folderPickerId)
162
163    switch (pickerMode) 
164    {
165        case "0" :
166            rg.selectedItem = selectAccountRadioElem;
167            SetPickerEnabling(accountPickerId, folderPickerId);
168            break;
169
170        case "1"  :
171            rg.selectedItem = selectFolderRadioElem;
172            SetPickerEnabling(folderPickerId, accountPickerId);
173            break;
174    case "2"  :
175        rg.selectedItem = document.getElementById(radioElemPrefix + "_Settings_Of_Default");
176        folderPicker.setAttribute("disabled", "true");
177        accountPicker.setAttribute("disabled", "true");
178            break;
179    case "3"  :
180        rg.selectedItem = document.getElementById(radioElemPrefix + "_Settings_Of_Account");
181        folderPicker.setAttribute("disabled", "true");
182        accountPicker.setAttribute("disabled", "true");
183            break;
184
185        default :
186            alert("Error in setting initial folder display on pickers\n");
187            break;
188    }
189
190    // Check to see if we need to lock page elements. Disable radio buttons
191    // and account/folder pickers when locked.
192    if (disableMode) {
193      selectAccountRadioElem.setAttribute("disabled","true");
194      selectFolderRadioElem.setAttribute("disabled","true");
195      accountPicker.setAttribute("disabled","true");
196      folderPicker.setAttribute("disabled","true");
197    }
198}
199
200// Need to append special folders when account picker is selected.
201// Create a set of global special folder vars to be suffixed to the
202// server URI of the selected account.
203function SetSpecialFolderNamesWithDelims()
204{
205    var folderDelim = "/";
206    /* we use internal names known to everyone like "Sent", "Templates" and "Drafts" */
207
208    gFccFolderWithDelim = folderDelim + "Sent";
209    gDraftsFolderWithDelim = folderDelim + "Drafts";
210    gTemplatesFolderWithDelim = folderDelim + "Templates";
211}
212
213function onSaveCopiesAndFolders()
214{
215    vI.SaveFolderSettings( gFccRadioElemChoice, 
216                        "doFcc",
217                        gFccFolderWithDelim, 
218                        fccAccountPickerId, 
219                        fccFolderPickerId,
220                        "VIdent_identity.fccFolder",
221                        "VIdent_identity.fccFolderPickerMode" );
222
223    vI.SaveFolderSettings( gDraftsRadioElemChoice, 
224                        "messageDrafts",
225                        gDraftsFolderWithDelim, 
226                        draftsAccountPickerId, 
227                        draftsFolderPickerId,
228                        "VIdent_identity.draftFolder",
229                        "VIdent_identity.draftFolderPickerMode" );
230
231    vI.SaveFolderSettings( gTmplRadioElemChoice,
232                        "messageTemplates",
233                        gTemplatesFolderWithDelim, 
234                        tmplAccountPickerId, 
235                        tmplFolderPickerId,
236                        "VIdent_identity.stationeryFolder",
237                        "VIdent_identity.stationeryFolderPickerMode" );
238}
239
240// Check the Fcc Self item and setup associated picker state
241function setupFccItems()
242{ 
243    var broadcaster = document.getElementById("VIdent_broadcaster_doFcc");
244
245    var checked = document.getElementById("VIdent_identity.doFcc").checked;
246    if (checked) {
247        broadcaster.removeAttribute("disabled");
248        SetupFccPickerState(gFccRadioElemChoice,
249                            fccAccountPickerId,
250                            fccFolderPickerId);
251      }
252    else
253        broadcaster.setAttribute("disabled", "true");
254}
255
256// Set up picker settings for Sent Folder
257function SetupFccPickerState(pickerMode, accountPickerId, folderPickerId)
258{
259    switch (pickerMode) {
260        case "0" :
261            if (!gFccRadioElemChoiceLocked)
262              SetPickerEnabling(accountPickerId, folderPickerId);
263            SetRadioButtons("VIdent_fcc_selectAccount", "VIdent_fcc_selectFolder");
264            break;
265   
266        case "1" :
267            if (!gFccRadioElemChoiceLocked)
268              SetPickerEnabling(folderPickerId, accountPickerId);
269            SetRadioButtons("VIdent_fcc_selectFolder", "VIdent_fcc_selectAccount");
270            break;
271
272        default :
273          document.getElementById(folderPickerId).setAttribute("disabled", "true");
274          document.getElementById(accountPickerId).setAttribute("disabled", "true");
275            break;
276    }
277}
278
279// Enable and disable pickers based on the radio element clicked
280function SetPickerEnabling(enablePickerId, disablePickerId)
281{
282    var activePicker = document.getElementById(enablePickerId);
283    activePicker.removeAttribute("disabled");
284
285    var inactivePicker = document.getElementById(disablePickerId);
286    inactivePicker.setAttribute("disabled", "true");
287}
288
289// Set radio element choices and picker states
290function setPickersState(enablePickerId, disablePickerId, event)
291{
292    SetPickerEnabling(enablePickerId, disablePickerId);
293
294    var radioElemValue = event.target.value;
295   
296    switch (event.target.id) {
297    case "VIdent_fcc_Settings_Of_Account":
298    case "VIdent_fcc_Settings_Of_Default":
299        document.getElementById(enablePickerId).setAttribute("disabled", "true");
300        case "VIdent_fcc_selectAccount":
301        case "VIdent_fcc_selectFolder" :
302            gFccRadioElemChoice = radioElemValue;   
303            break;
304    case "VIdent_draft_Settings_Of_Account":
305    case "VIdent_draft_Settings_Of_Default":
306        document.getElementById(enablePickerId).setAttribute("disabled", "true");
307        case "VIdent_draft_selectAccount":
308        case "VIdent_draft_selectFolder" :
309            gDraftsRadioElemChoice = radioElemValue;   
310            break;
311    case "VIdent_tmpl_Settings_Of_Account":
312    case "VIdent_tmpl_Settings_Of_Default":
313        document.getElementById(enablePickerId).setAttribute("disabled", "true");
314        case "VIdent_tmpl_selectFolder" :
315        case "VIdent_tmpl_selectAccount":
316            gTmplRadioElemChoice = radioElemValue;   
317            break;
318        default :
319            alert("Error in setting picker state. " + event.target.id + "\n");
320            return;
321    }
322   
323    switch (event.target.id) {
324        case "VIdent_fcc_Settings_Of_Account":
325    case "VIdent_fcc_Settings_Of_Default":
326        document.getElementById("VIdent_identity.fccReplyFollowsParent").setAttribute("disabled","true");
327        break;
328        case "VIdent_fcc_selectAccount":
329        case "VIdent_fcc_selectFolder" :
330        document.getElementById("VIdent_identity.fccReplyFollowsParent").removeAttribute("disabled")
331            break;
332     }
333}
334
335// This routine is to restore the correct radio element
336// state when the fcc self checkbox broadcasts the change
337function SetRadioButtons(selectPickerId, unselectPickerId)
338{
339    var activeRadioElem = document.getElementById(selectPickerId);
340    activeRadioElem.radioGroup.selectedItem = activeRadioElem;
341}
342vI.onInitCopiesAndFolders = onInitCopiesAndFolders;
343vI.onSaveCopiesAndFolders = onSaveCopiesAndFolders;
344vI.setPickersState = setPickersState;
345}});
Note: See TracBrowser for help on using the repository browser.