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

source: chrome/content/v_identity/vI_prefDialog.js @ 9e9bab

Last change on this file since 9e9bab was 9e9bab, checked in by root <root@…>, 15 years ago

initial import v0.4.0

  • Property mode set to 100644
File size: 17.6 KB
Line 
1/* ***** BEGIN LICENSE BLOCK *****
2    This program is free software; you can redistribute it and/or modify
3    it under the terms of the GNU General Public License as published by
4    the Free Software Foundation; either version 2 of the License, or
5    (at your option) any later version.
6
7    This program is distributed in the hope that it will be useful,
8    but WITHOUT ANY WARRANTY; without even the implied warranty of
9    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10    GNU General Public License for more details.
11
12    You should have received a copy of the GNU General Public License
13    along with this program; if not, write to the Free Software
14    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
15
16    The Original Code is the Virtual Identity Extension.
17
18    The Initial Developer of the Original Code is Rene Ejury.
19    Portions created by the Initial Developer are Copyright (C) 2007
20    the Initial Developer. All Rights Reserved.
21
22    Contributor(s): Thunderbird Developers
23 * ***** END LICENSE BLOCK ***** */
24
25/**
26* some code copied and adapted from Thunderbird Sources
27* thanks to all Thunderbird Developers
28*/
29
30vI_prefDialog = {
31    preferences : Components.classes["@mozilla.org/preferences-service;1"]
32                .getService(Components.interfaces.nsIPrefService)
33                .getBranch("extensions.virtualIdentity."),
34   
35    base : {
36        _elementIDs : [ "VIdent_identity.doFcc",
37                "VIdent_identity.fccFolderPickerMode",
38                "VIdent_identity.fccFolder",
39                "VIdent_identity.copySMIMESettings",
40                "VIdent_identity.copyEnigmailSettings",
41                "VIdent_identity.copyAttachVCardSettings",
42                "VIdent_identity.smart_reply",
43                "VIdent_identity.smart_reply_for_newsgroups",
44                "VIdent_identity.smart_reply_ask",
45                "VIdent_identity.smart_reply_ask_always",
46                "VIdent_identity.show_smtp",
47                "VIdent_identity.smart_reply_headers",
48                "VIdent_identity.smart_reply_filter",
49                "VIdent_identity.smart_draft",
50                "VIdent_identity.smart_reply_prefer_headers",
51                "VIdent_identity.smart_reply_notification",
52                "VIdent_identity.get_header_notification",
53                "VIdent_identity.smart_reply_ignoreFullName",
54                "VIdent_identity.smart_reply_autocreate",
55                "VIdent_identity.notification_timeout"],
56   
57        init : function() {
58        // initialize the default window values...
59            for( var i = 0; i < vI_prefDialog.base._elementIDs.length; i++ ) {
60                var elementID = vI_prefDialog.base._elementIDs[i];
61                var element = document.getElementById(elementID);
62                if (!element) break;
63                var eltType = element.localName;
64                try {
65                if (eltType == "radiogroup")
66                    element.selectedItem = element.childNodes[
67                        vI_prefDialog.preferences.getIntPref(element.getAttribute("prefstring"))];
68                else if (eltType == "checkbox")
69                    element.checked = 
70                        vI_prefDialog.preferences.getBoolPref(element.getAttribute("prefstring"));
71                else if (eltType == "textbox")
72                    if (element.getAttribute("preftype") == "int")
73                        element.setAttribute("value", 
74                        vI_prefDialog.preferences.getIntPref(element.getAttribute("prefstring")) );
75                    else element.setAttribute("value", 
76                        vI_prefDialog.preferences.getCharPref(element.getAttribute("prefstring")) );
77                } catch (ex) {}
78            }
79        },
80       
81        savePrefs : function() {
82            for( var i = 0; i < vI_prefDialog.base._elementIDs.length; i++ ) {
83                var elementID = vI_prefDialog.base._elementIDs[i];
84                var element = document.getElementById(elementID);
85                if (!element) break;
86                var eltType = element.localName;
87                if (eltType == "radiogroup")
88                    vI_prefDialog.preferences.setIntPref(
89                        element.getAttribute("prefstring"), parseInt(element.value));
90                else if (eltType == "checkbox")
91                    vI_prefDialog.preferences.setBoolPref(
92                        element.getAttribute("prefstring"), element.checked);
93                else if (eltType == "textbox")
94                    if (element.getAttribute("preftype") == "int")
95                        vI_prefDialog.preferences.setIntPref(
96                            element.getAttribute("prefstring"), element.value);
97                    else vI_prefDialog.preferences.setCharPref(
98                            element.getAttribute("prefstring"), element.value);
99            }
100        },
101       
102        smartReplyConstraint : function(element) {
103            var elementIDs = [
104                "VIdent_identity.smart_reply_for_newsgroups",
105                "VIdent_identity.smart_reply_ask",
106                "VIdent_identity.smart_reply_ask_always",
107                "VIdent_identity.smart_reply_headers",
108                "VIdent_identity.smart_reply_filter",
109                "VIdent_identity.smart_reply_prefer_headers",
110                "VIdent_identity.smart_reply_ignoreFullName",
111                "VIdent_identity.smart_reply_autocreate",
112                "smartReplyTab", "smartReplyTab1", "smartReplyTab2", "smartReplyTab3"];
113            for( var i = 0; i < elementIDs.length; i++ ) {
114                if (element.checked)
115                    document.getElementById(elementIDs[i])
116                        .removeAttribute("disabled");
117                else
118                    document.getElementById(elementIDs[i])
119                        .setAttribute("disabled", "true");
120            }
121            vI_prefDialog.base.smartReplyResultConstraint();
122        },
123       
124        smartReplyResultConstraint : function() {
125            var ask = document.getElementById("VIdent_identity.smart_reply_ask")
126            var ask_always = document.getElementById("VIdent_identity.smart_reply_ask_always")
127            var autocreate = document.getElementById("VIdent_identity.smart_reply_autocreate")
128            ask_always.setAttribute("disabled", (autocreate.checked || !ask.checked))
129            autocreate.setAttribute("disabled", ask_always.checked)
130        }
131    },
132
133    init : function() {
134        vI_prefDialog.base.init();
135        SetGlobalRadioElemChoices();
136        SetFolderDisplay(gFccRadioElemChoice, gFccRadioElemChoiceLocked, "VIdent_fcc", 
137            fccAccountPickerId, "VIdent_identity.fccFolder", fccFolderPickerId);
138        setupFccItems();
139        SetSpecialFolderNamesWithDelims();
140
141        var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
142        var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"].getService(Components.interfaces.nsIVersionComparator);
143        const THUNDERBIRD_ID = "{3550f703-e582-4d05-9a08-453d09bdfdc6}";
144        //const MOZILLA_ID = "{86c18b42-e466-45a9-ae7a-9b95ba6f5640}";
145        const SEAMONKEY_ID = "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}";
146        if ((appInfo.ID == THUNDERBIRD_ID && versionChecker.compare(appInfo.version, "2.0b") < 0) ||
147            (appInfo.ID == SEAMONKEY_ID && versionChecker.compare(appInfo.version, "1.5a") < 0)) {
148            document.getElementById("version-warning").setAttribute("hidden", "false");
149            document.getElementById("VIdent_identity.smart_draft").setAttribute("disabled", "true");
150        }
151       
152       
153        vI_prefDialog.base.smartReplyConstraint(document.getElementById("VIdent_identity.smart_reply"));
154       
155        dump("## vI_prefDialog: init_prefs done\n");
156    },
157   
158    savePrefs : function() {
159        // Copy all changes to Elements
160        SaveFolderSettings( gFccRadioElemChoice, "VIdent_doFcc",
161            gFccFolderWithDelim, fccAccountPickerId, fccFolderPickerId,
162            "VIdent_identity.fccFolder", "VIdent_identity.fccFolderPickerMode" );
163        vI_prefDialog.base.savePrefs();
164    }
165}
166
167
168/* following code is copied and adapted from thunderbird sources */
169
170// Initialize the picker mode choices (account/folder picker) into global vars
171function SetGlobalRadioElemChoices() {
172    var pickerModeElement = document.getElementById("VIdent_identity.fccFolderPickerMode");
173    gFccRadioElemChoice = pickerModeElement.getAttribute("value");
174    gFccRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
175    if (!gFccRadioElemChoice) {
176      gFccRadioElemChoice = gDefaultPickerMode
177      var formElement = document.getElementById("VIdent_identity.fccFolder");
178      formElement.setAttribute("value",gDefaultFccFolder);
179      SetFolderPicker(gDefaultFccFolder, "msgFccAccountPicker");
180      document.getElementById("VIdent_identity.doFcc").checked = true;
181      //~ dump("## vI_prefDialog: restored default state\n");
182      }
183}
184
185var gFccRadioElemChoice;
186var gFccRadioElemChoiceLocked;
187var gDefaultPickerMode = "3";
188var gDefaultFccFolder = "";
189
190var gFccFolderWithDelim;
191
192
193// Picker IDs
194var fccAccountPickerId = "msgFccAccountPicker";
195var fccFolderPickerId = "msgFccFolderPicker";
196
197// Need to append special folders when account picker is selected.
198// Create a set of global special folder vars to be suffixed to the
199// server URI of the selected account.
200function SetSpecialFolderNamesWithDelims()
201{
202    var folderDelim = "/";
203    /* we use internal names known to everyone like "Sent", "Templates" and "Drafts" */
204
205    gFccFolderWithDelim = folderDelim + "Sent";
206}
207
208
209// additional variables usually provided by parent pages
210var gMessengerBundle;
211gMessengerBundle = document.getElementById("bundle_messenger");
212
213/*
214 * Set Account and Folder elements based on the values read from
215 * preferences file. Default picker mode, if none specified at this stage, is
216 * set to 1 i.e., Other picker displaying the folder value read from the
217 * preferences file.
218 */
219function SetFolderDisplay(pickerMode, disableMode,
220                          radioElemPrefix, 
221                          accountPickerId, 
222                          folderPickedField, 
223                          folderPickerId)
224{
225    if (!pickerMode)
226        pickerMode = gDefaultPickerMode;
227
228    //~ dump("## vI_prefDialog: try to set folder display\n");
229    var selectAccountRadioId = radioElemPrefix + "_selectAccount";
230    var selectAccountRadioElem = document.getElementById(selectAccountRadioId);
231    var selectFolderRadioId = radioElemPrefix + "_selectFolder";
232    var selectFolderRadioElem = document.getElementById(selectFolderRadioId);
233    var accountPicker = document.getElementById(accountPickerId);
234    var folderPicker = document.getElementById(folderPickerId);
235    var rg = selectAccountRadioElem.radioGroup;
236    //~ dump("## vI_prefDialog: try to set folder display - switch by picker mode " + pickerMode + "\n");
237   
238   
239    switch (pickerMode) 
240    {
241        case "0" :
242            rg.selectedItem = selectAccountRadioElem;
243
244            var folderPickedElement = document.getElementById(folderPickedField);
245            var uri = folderPickedElement.getAttribute("value");
246            // Get message folder from the given uri. Second argument (false) siginifies
247            // that there is no need to check for the existence of special folders as
248            // these folders are created on demand at runtime in case of imap accounts.
249            // For POP3 accounts, special folders are created at the account creation time.
250            var msgFolder = GetMsgFolderFromUri(uri, false);
251        SetFolderPicker(msgFolder.server.serverURI, accountPickerId);
252        document.getElementById(accountPickerId).removeAttribute("disabled");
253        document.getElementById(folderPickerId).setAttribute("disabled", "true");
254            break;
255        case "1"  :
256            rg.selectedItem = selectFolderRadioElem;
257               
258            InitFolderDisplay(folderPickedField, folderPickerId);
259        document.getElementById(folderPickerId).removeAttribute("disabled");
260        document.getElementById(accountPickerId).setAttribute("disabled", "true");
261            break;
262    case "2"  :
263        rg.selectedItem = document.getElementById(radioElemPrefix + "_Settings_Of_Default");
264        document.getElementById(folderPickerId).setAttribute("disabled", "true");
265        document.getElementById(accountPickerId).setAttribute("disabled", "true");
266            break;
267    case "3"  :
268        rg.selectedItem = document.getElementById(radioElemPrefix + "_Settings_Of_Account");
269        document.getElementById(folderPickerId).setAttribute("disabled", "true");
270        document.getElementById(accountPickerId).setAttribute("disabled", "true");
271            break;
272       default :
273        document.getElementById(folderPickerId).setAttribute("disabled", "true");
274        document.getElementById(accountPickerId).setAttribute("disabled", "true");
275            break;
276    }
277    // Check to see if we need to lock page elements. Disable radio buttons
278    // and account/folder pickers when locked.
279    if (disableMode) {
280      selectAccountRadioElem.setAttribute("disabled","true");
281      selectFolderRadioElem.setAttribute("disabled","true");
282      document.getElementById(radioElemPrefix + "_Settings_Of_Default").setAttribute("disabled", "true");
283      document.getElementById(radioElemPrefix + "_Settings_Of_Account").setAttribute("disabled", "true");
284      accountPicker.setAttribute("disabled","true");
285      folderPicker.setAttribute("disabled","true");
286    }
287   
288}
289
290// Save folder settings and radio element choices
291function SaveFolderSettings(radioElemChoice, 
292                            radioGroupId,
293                            folderSuffix,
294                            accountPickerId,
295                            folderPickerId,
296                            folderElementId,
297                            folderPickerModeId)
298{
299    var formElement;
300    var uri;
301    var picker;
302
303    //~ dump("## vI_prefDialog: SaveFolderSettings " + radioElemChoice + "\n");
304
305    switch (radioElemChoice) 
306    {
307        case "0" :
308            picker = document.getElementById(accountPickerId);
309            uri = picker.getAttribute("uri");
310            if (uri) {
311        //~ dump("## vI_prefDialog: trying to save picker settings (0) " + uri + folderSuffix + "\n");
312                // Create  Folder URI
313                uri = uri + folderSuffix;
314
315                formElement = document.getElementById(folderElementId);
316                formElement.setAttribute("value",uri);
317            }
318            break;
319
320        case "1" : 
321            picker = document.getElementById(folderPickerId);
322            uri = picker.getAttribute("uri");
323            if (uri) {
324                SaveUriFromPicker(folderElementId, folderPickerId);
325            }
326            break;
327
328        default :
329            break;
330    }
331
332    formElement = document.getElementById(folderPickerModeId);
333    formElement.setAttribute("value", radioElemChoice);
334}
335
336// Get the URI from the picker and save the value into the corresponding pref
337function SaveUriFromPicker(fieldName, pickerId)
338{
339    var picker = document.getElementById(pickerId);
340    var uri = picker.getAttribute("uri");
341   
342        //~ dump("## vI_prefDialog: trying to save Uri from Picker (1) " + uri + "\n");
343    var formElement = document.getElementById(fieldName);
344    formElement.setAttribute("value",uri);
345}
346
347// Initialize the folder display based on prefs values
348function InitFolderDisplay(fieldname, pickerId) {
349    var formElement = document.getElementById(fieldname);
350    var uri = formElement.getAttribute("value");
351    SetFolderPicker(uri,pickerId);
352}
353
354// Check the Fcc Self item and setup associated picker state
355function setupFccItems()
356{ 
357    //~ dump("## vI_prefDialog: SetupFccItems\n");
358    var broadcaster = document.getElementById("VIdent_broadcaster_doFcc");
359    if (document.getElementById("VIdent_identity.doFcc").checked) {
360        broadcaster.removeAttribute("disabled");
361        SetupFccPickerState(document.getElementById("VIdent_identity.fccFolderPickerMode").value);
362    }
363    else
364        broadcaster.setAttribute("disabled", "true");
365}
366
367// Set up picker settings for Sent Folder
368function SetupFccPickerState(pickerMode)
369{
370    var pickerModeElement = document.getElementById("VIdent_identity.fccFolderPickerMode");
371    var gFccRadioElemChoice = pickerModeElement.getAttribute("value");
372    var gFccRadioElemChoiceLocked = document.getElementById("VIdent_identity.fccFolderPickerMode").getAttribute("disabled");
373   
374    //~ dump("## vI_prefDialog: pickermode: " + pickerMode + "\n");
375    switch (pickerMode) {
376        case "0" :
377            if (!gFccRadioElemChoiceLocked) {
378              document.getElementById("msgFccAccountPicker").removeAttribute("disabled");
379          document.getElementById("msgFccFolderPicker").setAttribute("disabled", "true"); }
380        var activeRadioElem = document.getElementById("VIdent_fcc_selectAccount");
381        activeRadioElem.radioGroup.selectedItem = activeRadioElem;
382            break;
383   
384        case "1" :
385            if (!gFccRadioElemChoiceLocked) {
386              document.getElementById("msgFccFolderPicker").removeAttribute("disabled");
387          document.getElementById("msgFccAccountPicker").setAttribute("disabled", "true"); }
388        var activeRadioElem = document.getElementById("VIdent_fcc_selectFolder");
389        activeRadioElem.radioGroup.selectedItem = activeRadioElem;
390            break;
391
392        default :
393          document.getElementById("msgFccFolderPicker").setAttribute("disabled", "true");
394          document.getElementById("msgFccAccountPicker").setAttribute("disabled", "true");
395            break;
396    }
397}
398
399// Set radio element choices and picker states
400function setPickersState(enablePickerId, disablePickerId, event)
401{
402    document.getElementById(enablePickerId).removeAttribute("disabled");
403    document.getElementById(disablePickerId).setAttribute("disabled", "true");
404
405    var selectedElementUri;
406    var radioElemValue = event.target.value;
407   
408    var AccManager = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager);
409    selectedElementUri = AccManager.localFoldersServer.serverURI;
410   
411    switch (event.target.id) {
412        case "VIdent_fcc_selectAccount" :
413            gFccRadioElemChoice = radioElemValue;
414        document.getElementById(enablePickerId).removeAttribute("disabled");
415        break;
416        case "VIdent_fcc_selectFolder" :
417            gFccRadioElemChoice = radioElemValue;   
418            selectedElementUri += gFccFolderWithDelim;
419        document.getElementById(enablePickerId).removeAttribute("disabled");
420            break;
421        default :
422        gFccRadioElemChoice = radioElemValue;
423        selectedElementUri = "";
424        document.getElementById(enablePickerId).setAttribute("disabled", "true");
425            break;
426    }
427   
428    SetFolderPicker(selectedElementUri, enablePickerId);
429}
430
431// Capture any menulist changes
432function noteSelectionChange(radioItemId)
433{
434    var checkedElem = document.getElementById(radioItemId);
435    var modeValue  = checkedElem.getAttribute("value");
436    var radioGroup = checkedElem.radioGroup.getAttribute("id");
437    //~ dump("## vI_prefDialog: Fcc-value changed\n");
438    gFccRadioElemChoice = modeValue;
439}
Note: See TracBrowser for help on using the repository browser.