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

source: content/prefDialog/vI_prefDialog_FolderPicker.js @ d5349d

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

cleanup for javascript strict mode

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