--- a/mail/components/preferences/fonts.js
+++ b/mail/components/preferences/fonts.js
@@ -12,82 +12,16 @@ const kFontNameFmtMonospace = "font.
const kFontNameListFmtSerif = "font.name-list.serif.%LANG%";
const kFontNameListFmtSansSerif = "font.name-list.sans-serif.%LANG%";
const kFontNameListFmtMonospace = "font.name-list.monospace.%LANG%";
const kFontSizeFmtVariable = "font.size.variable.%LANG%";
const kFontSizeFmtFixed = "font.size.fixed.%LANG%";
const kFontMinSizeFmt = "font.minimum-size.%LANG%";
var gFontsDialog = {
- _init: function()
- {
- // build the charset menu lists.
- this.createDefaultCharsetMenus();
- },
-
- createDefaultCharsetMenus: function()
- {
- var viewCharsetsValues = ["UTF-8", "Big5", "EUC-KR", "gbk", "ISO-2022-JP",
- "ISO-8859-1", "ISO-8859-2", "ISO-8859-7",
- "windows-874", "windows-1250", "windows-1251",
- "windows-1252", "windows-1255", "windows-1256",
- "windows-1257", "windows-1258"]
-
- var sendCharsetsValues = ["UTF-8", "EUC-KR", "gbk", "gb18030",
- "ISO-2022-JP", "ISO-8859-1", "ISO-8859-7",
- "windows-1252"]
-
- var viewMenuList = document.getElementById("viewDefaultCharsetList");
- var sendMenuList = document.getElementById("sendDefaultCharsetList");
-
- this.populateCharsetMenu(viewMenuList,
- this.sortCharsetLabels(viewCharsetsValues));
- this.populateCharsetMenu(sendMenuList,
- this.sortCharsetLabels(sendCharsetsValues));
-
- // Select appropiate menu item.
- var preference = document.getElementById(
- viewMenuList.getAttribute("preference"));
- viewMenuList.value = preference.value;
-
- preference = document.getElementById(
- sendMenuList.getAttribute("preference"));
- sendMenuList.value = preference.value;
- },
-
- sortCharsetLabels: function(aMenuStrings)
- {
- var menuLabels = [];
- var charsetBundle = Services.strings.createBundle(
- "chrome://messenger/locale/charsetTitles.properties");
-
- aMenuStrings.forEach(function(item) {
- var strCharset = charsetBundle.GetStringFromName(
- item.toLowerCase() + ".title");
-
- menuLabels.push({label: strCharset, value: item});
- });
-
- menuLabels.sort(function(a, b) {
- if (a.value == "UTF-8" || a.label < b.label)
- return -1;
- if (b == "UTF-8" || a.label > b.label)
- return 1;
- return 0;
- });
- return menuLabels;
- },
-
- populateCharsetMenu: function(aMenuList, aMenuStrings)
- {
- aMenuStrings.forEach(function(item) {
- aMenuList.appendItem(item.label, item.value);
- });
- },
-
_selectLanguageGroup: function (aLanguageGroup)
{
var prefs = [{ format: kDefaultFontType, type: "string", element: "defaultFontType", fonttype: null},
{ format: kFontNameFmtSerif, type: "fontname", element: "serif", fonttype: "serif" },
{ format: kFontNameFmtSansSerif, type: "fontname", element: "sans-serif", fonttype: "sans-serif" },
{ format: kFontNameFmtMonospace, type: "fontname", element: "monospace", fonttype: "monospace" },
{ format: kFontNameListFmtSerif, type: "unichar", element: null, fonttype: "serif" },
{ format: kFontNameListFmtSansSerif, type: "unichar", element: null, fonttype: "sans-serif" },
--- a/mail/components/preferences/fonts.xul
+++ b/mail/components/preferences/fonts.xul
@@ -1,16 +1,17 @@
<?xml version="1.0"?>
# -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
<?xml-stylesheet href="chrome://global/skin/"?>
+<?xml-stylesheet href="chrome://messenger/content/charsetList.css"?>
#ifdef XP_MACOSX
<?xml-stylesheet href="chrome://messenger/skin/preferences/preferences.css"?>
#endif
<!DOCTYPE prefwindow [
<!ENTITY % fontsDTD SYSTEM "chrome://messenger/locale/preferences/fonts.dtd" >
%fontsDTD;
]>
@@ -25,17 +26,17 @@
style="width: &window.macWidth; !important;">
#else
style="width: &window.unixWidth; !important;">
#endif
#else
style="width: &window.width; !important;">
#endif
- <prefpane id="FontsDialogPane" onpaneload="gFontsDialog._init();">
+ <prefpane id="FontsDialogPane">
<preferences id="fontPreferences">
<preference id="font.language.group" name="font.language.group" type="wstring"/>
<preference id="mail.fixed_width_messages" name="mail.fixed_width_messages" type="bool"/>
<preference id="browser.display.use_document_fonts"
name="browser.display.use_document_fonts"
type="int"/>
<preference id="intl.charset.default" name="intl.charset.default" type="wstring"/>
@@ -278,25 +279,27 @@
<column flex="1"/>
</columns>
<rows>
<row align="center" class="indent">
<label control="sendDefaultCharsetList"
value="&sendDefaultCharset.label;"
accesskey="&sendDefaultCharset.accesskey;"/>
- <menulist id="sendDefaultCharsetList" flex="1"
+ <menulist id="sendDefaultCharsetList" type="charset"
+ subset="sending"
preference="mailnews.send_default_charset"/>
</row>
<row align="center" class="indent">
<label control="viewDefaultCharsetList"
value="&viewDefaultCharsetList.label;"
accesskey="&viewDefaultCharsetList.accesskey;"/>
- <menulist id="viewDefaultCharsetList"
+ <menulist id="viewDefaultCharsetList" type="charset"
+ subset="viewing"
preference="mailnews.view_default_charset" />
</row>
</rows>
</grid>
<separator class="thin"/>
<checkbox id="replyInDefaultCharset" label="&replyInDefaultCharset2.label;"
new file mode 100644
--- /dev/null
+++ b/mailnews/base/content/charsetList.css
@@ -0,0 +1,5 @@
+@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
+
+menulist[type="charset"] {
+ -moz-binding: url("chrome://messenger/content/charsetList.xml#charsetpicker");
+}
new file mode 100644
--- /dev/null
+++ b/mailnews/base/content/charsetList.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+
+<bindings id="charsetListBinding"
+ xmlns="http://www.mozilla.org/xbl"
+ xmlns:xbl="http://www.mozilla.org/xbl"
+ xmlns:html="http://www.w3.org/1999/xhtml"
+ xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <binding id="charsetpicker"
+ extends="chrome://global/content/bindings/menulist.xml#menulist">
+ <implementation>
+ <constructor><![CDATA[
+ let charsetValues = "";
+
+ if (this.getAttribute("subset") == "sending")
+ charsetValues = ["UTF-8", "EUC-KR", "gbk", "gb18030", "ISO-2022-JP",
+ "ISO-8859-1", "ISO-8859-7", "windows-1252"];
+
+ else if (!this.getAttribute("subset")
+ || this.getAttribute("subset") == "viewing")
+ charsetValues = ["UTF-8", "Big5", "EUC-KR", "gbk", "ISO-2022-JP",
+ "ISO-8859-1", "ISO-8859-2", "ISO-8859-7",
+ "windows-874", "windows-1250", "windows-1251",
+ "windows-1252", "windows-1255", "windows-1256",
+ "windows-1257", "windows-1258"];
+
+ Components.utils.import("resource://gre/modules/Services.jsm");
+
+ let charsetBundle = Services.strings.createBundle(
+ "chrome://messenger/locale/charsetTitles.properties");
+ let aMenuList = this;
+ let menuLabels = [];
+
+ charsetValues.forEach(function(item) {
+ let strCharset = charsetBundle.GetStringFromName(
+ item.toLowerCase() + ".title");
+
+ menuLabels.push({label: strCharset, value: item});
+ });
+
+ menuLabels.sort(function(a, b) {
+ if (a.value == "UTF-8" || a.label < b.label)
+ return -1;
+ else if (b.value == "UTF-8" || a.label > b.label)
+ return 1;
+ return 0;
+ });
+
+ menuLabels.forEach(function(item) {
+ aMenuList.appendItem(item.label, item.value);
+ });
+
+ // Selecting appropiate menu item corresponding to preference stored
+ // value.
+ if (this.hasAttribute("preference")) {
+ const Ci = Components.interfaces;
+
+ let preference = Services.prefs.getComplexValue(
+ this.getAttribute("preference"), Ci.nsIPrefLocalizedString);
+ this.value = preference.data;
+ }
+ ]]></constructor>
+ </implementation>
+ </binding>
+</bindings>
--- a/mailnews/base/content/folderProps.js
+++ b/mailnews/base/content/folderProps.js
@@ -232,17 +232,16 @@ function folderPropsOnLoad()
else {
if(serverType == "imap" || serverType == "pop3")
document.getElementById("offline.selectForOfflineFolder").checked = false;
if(serverType == "nntp")
document.getElementById("offline.selectForOfflineNewsgroup").checked = false;
}
- createCharsetMenu();
// select the menu item
var folderCharsetList = document.getElementById("folderCharsetList");
folderCharsetList.value = gMsgFolder.charset;
// set override checkbox
document.getElementById("folderCharsetOverride").checked = gMsgFolder.charsetOverride;
// set check for new mail checkbox
@@ -293,61 +292,16 @@ function folderPropsOnLoad()
document.getElementById(window.arguments[0].tabID);
}
catch (ex) {}
}
onCheckKeepMsg();
onUseDefaultRetentionSettings();
}
-function createCharsetMenu()
-{
- var menuStrings = ["UTF-8", "Big5", "EUC-KR", "gbk", "ISO-2022-JP",
- "ISO-8859-1", "ISO-8859-2", "ISO-8859-7", "windows-874",
- "windows-1250", "windows-1251", "windows-1252",
- "windows-1255", "windows-1256", "windows-1257",
- "windows-1258"];
-
- var menuList = document.getElementById("folderCharsetList");
-
- this.populateCharsetMenu(menuList,
- this.sortCharsetLabels(menuStrings));
-}
-
-function populateCharsetMenu(aMenuList, aMenuStrings)
-{
- aMenuStrings.forEach(function(item) {
- aMenuList.appendItem(item.label, item.value);
- });
-}
-
-function sortCharsetLabels(aMenuStrings)
-{
- var menuLabels = [];
- var charsetBundle = Services.strings.createBundle(
- "chrome://messenger/locale/charsetTitles.properties");
-
- aMenuStrings.forEach(function(item) {
- var strCharset = charsetBundle.GetStringFromName(
- item.toLowerCase() + ".title");
-
- menuLabels.push({label: strCharset, value: item});
- });
-
- menuLabels.sort(function(a, b) {
- if (a.value == "UTF-8" || a.label < b.label)
- return -1;
- if (b == "UTF-8" || a.label > b.label)
- return 1;
- return 0;
- });
-
- return menuLabels;
-}
-
function hideShowControls(serverType)
{
let controls = document.querySelectorAll("[hidefor]");
var len = controls.length;
for (var i=0; i<len; i++) {
var control = controls[i];
var hideFor = control.getAttribute("hidefor");
if (!hideFor)
--- a/mailnews/base/content/folderProps.xul
+++ b/mailnews/base/content/folderProps.xul
@@ -2,16 +2,17 @@
<!--
This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
<?xml-stylesheet href="chrome://messenger/skin/preferences/preferences.css" type="text/css"?>
+<?xml-stylesheet href="chrome://messenger/content/charsetList.css" type="text/css"?>
<!DOCTYPE dialog SYSTEM "chrome://messenger/locale/folderProps.dtd">
<dialog
id="folderPropertiesDialog"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&folderProps.windowtitle.label;"
buttons="accept,cancel"
@@ -68,17 +69,17 @@
id="folderCheckForNewMessages"
label="&folderCheckForNewMessages2.label;"
accesskey="&folderCheckForNewMessages2.accesskey;"/>
<vbox>
<hbox align="center" valign="middle">
<label value="&folderCharsetFallback.label;"
accesskey="&folderCharsetFallback.accesskey;"
control="folderCharsetList"/>
- <menulist id="folderCharsetList"/>
+ <menulist id="folderCharsetList" type="charset"/>
</hbox>
<checkbox class="indent" id="folderCharsetOverride"
label="&folderCharsetEnforce.label;"
accesskey="&folderCharsetEnforce.accesskey;"/>
</vbox>
<groupbox id="folderRebuildSummaryGroupBox" align="baseline">
<grid>
<columns>
--- a/mailnews/base/prefs/content/am-server.js
+++ b/mailnews/base/prefs/content/am-server.js
@@ -4,28 +4,26 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Components.utils.import("resource:///modules/iteratorUtils.jsm");
Components.utils.import("resource:///modules/MailUtils.js");
Components.utils.import("resource://gre/modules/Services.jsm");
var gServer;
-function onInit(aPageId, aServerId)
+function onInit(aPageId, aServerId)
{
initServerType();
onCheckItem("server.biffMinutes", ["server.doBiff"]);
onCheckItem("nntp.maxArticles", ["nntp.notifyOn"]);
setupMailOnServerUI();
setupFixedUI();
if (document.getElementById("server.type").getAttribute("value") == "imap")
setupImapDeleteUI(aServerId);
- else if (document.getElementById("server.type").getAttribute("value") == "nntp")
- createCharsetDefaultMenu();
// "STARTTLS, if available" is vulnerable to MITM attacks so we shouldn't
// allow users to choose it anymore. Hide the option unless the user already
// has it set.
hideUnlessSelected(document.getElementById("connectionSecurityType-1"));
}
function onPreInit(account, accountValues)
@@ -79,20 +77,20 @@ function hideUnlessSelected(element)
}
function setLabelFromStringBundle(elementID, stringName)
{
document.getElementById(elementID).label =
document.getElementById("bundle_messenger").getString(stringName);
}
-function setDivText(divname, value)
+function setDivText(divname, value)
{
var div = document.getElementById(divname);
- if (!div)
+ if (!div)
return;
div.setAttribute("value", value);
}
function onAdvanced()
{
// Store the server type and, if an IMAP or POP3 server,
@@ -236,38 +234,38 @@ function setupAgeMsgOnServerUI()
const kDeleteByAgeId = "pop3.deleteByAgeFromServer";
onCheckItem(kDeleteByAgeId, [kLeaveMsgsId]);
onCheckItem("daysEnd", [kLeaveMsgsId]);
onCheckItem("pop3.numDaysToLeaveOnServer", [kLeaveMsgsId, kDeleteByAgeId]);
}
function setupFixedUI()
{
- var controls = [document.getElementById("fixedServerName"),
+ var controls = [document.getElementById("fixedServerName"),
document.getElementById("fixedUserName"),
document.getElementById("fixedServerPort")];
- var len = controls.length;
+ var len = controls.length;
for (var i=0; i<len; i++) {
var fixedElement = controls[i];
var otherElement = document.getElementById(fixedElement.getAttribute("use"));
fixedElement.setAttribute("collapsed", "true");
otherElement.removeAttribute("collapsed");
}
}
function BrowseForNewsrc()
{
const nsIFilePicker = Components.interfaces.nsIFilePicker;
const nsILocalFile = Components.interfaces.nsILocalFile;
var newsrcTextBox = document.getElementById("nntp.newsrcFilePath");
var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
- fp.init(window,
+ fp.init(window,
document.getElementById("browseForNewsrc").getAttribute("filepickertitle"),
nsIFilePicker.modeSave);
var currentNewsrcFile;
try {
currentNewsrcFile = Components.classes["@mozilla.org/file/local;1"]
.createInstance(nsILocalFile);
currentNewsrcFile.initWithPath(newsrcTextBox.value);
@@ -317,17 +315,17 @@ function selectImapDeleteModel(choice)
// set deleteModel to selected mode
document.getElementById("imap.deleteModel").setAttribute("value", choice);
switch (choice)
{
case "0" : // markDeleted
// disable folderPicker
document.getElementById("msgTrashFolderPicker").setAttribute("disabled", "true");
- break;
+ break;
case "1" : // moveToTrashFolder
// enable folderPicker
document.getElementById("msgTrashFolderPicker").removeAttribute("disabled");
break;
case "2" : // deleteImmediately
// disable folderPicker
document.getElementById("msgTrashFolderPicker").setAttribute("disabled", "true");
break;
@@ -371,58 +369,8 @@ function getTrashFolderName()
var trashFolderName = document.getElementById("imap.trashFolderName").getAttribute("value");
// if the preference hasn't been set, set it to a sane default
if (!trashFolderName) {
trashFolderName = "Trash";
document.getElementById("imap.trashFolderName").setAttribute("value",trashFolderName);
}
return trashFolderName;
}
-
-function createCharsetDefaultMenu()
-{
- var nntpCharsetsValues = ["UTF-8", "Big5", "EUC-KR", "gbk", "ISO-2022-JP",
- "ISO-8859-1", "ISO-8859-2", "ISO-8859-7",
- "windows-874", "windows-1250", "windows-1251",
- "windows-1252", "windows-1255", "windows-1256",
- "windows-1257", "windows-1258"];
-
- var charsetMenuList = document.getElementById("nntp.charset");
-
- this.populateCharsetMenu(charsetMenuList,
- this.sortCharsetLabels(nntpCharsetsValues));
-
- // Select appropiate menu item.
- var preference = substPrefTokens(
- charsetMenuList.getAttribute("prefstring"), charsetMenuList);
- charsetMenuList.value = Services.prefs.getCharPref(preference);
-}
-
-function sortCharsetLabels(aMenuStrings)
-{
- var menuLabels = [];
- var charsetBundle = Services.strings.createBundle(
- "chrome://messenger/locale/charsetTitles.properties");
-
- aMenuStrings.forEach(function(item) {
- var strCharset = charsetBundle.GetStringFromName(
- item.toLowerCase() + ".title");
-
- menuLabels.push({label: strCharset, value: item});
- });
-
- menuLabels.sort(function(a, b) {
- if (a.value == "UTF-8" || a.label < b.label)
- return -1;
- if (b == "UTF-8" || a.label > b.label)
- return 1;
- return 0;
- });
-
- return menuLabels;
-}
-
-function populateCharsetMenu(aMenuList, aMenuStrings)
-{
- aMenuStrings.forEach(function(item) {
- aMenuList.appendItem(item.label, item.value);
- });
-}
--- a/mailnews/base/prefs/content/am-server.xul
+++ b/mailnews/base/prefs/content/am-server.xul
@@ -4,16 +4,17 @@
This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<?xml-stylesheet href="chrome://messenger/skin/accountManage.css" type="text/css"?>
<?xml-stylesheet href="chrome://messenger/skin/messenger.css" type="text/css"?>
<?xml-stylesheet href="chrome://messenger/skin/folderMenus.css" type="text/css"?>
+<?xml-stylesheet href="chrome://messenger/content/charsetList.css" type="text/css"?>
<!DOCTYPE page [
<!ENTITY % trashDTD SYSTEM "chrome://messenger/locale/am-server-top.dtd">
%trashDTD;
]>
<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&serverSettings.label;"
@@ -413,16 +414,17 @@
</groupbox>
<separator class="thin"/>
<hbox hidefor="imap,pop3,movemail" align="center" valign="middle" iscontrolcontainer="true">
<label value="&serverDefaultCharset.label;" control="nntp.charset"/>
<menulist hidable="true"
+ type="charset"
hidefor="imap,pop3,movemail"
wsm_persist="true"
id="nntp.charset"
preftype="string"
prefstring="mail.server.%serverkey%.charset"/>
</hbox>
</vbox>
</page>
--- a/mailnews/jar.mn
+++ b/mailnews/jar.mn
@@ -77,16 +77,18 @@ messenger.jar:
content/messenger/accountcreation/util.js (base/prefs/content/accountcreation/util.js)
content/messenger/accountcreation/verifyConfig.js (base/prefs/content/accountcreation/verifyConfig.js)
#endif
content/messenger/msgSynchronize.xul (base/content/msgSynchronize.xul)
content/messenger/msgSynchronize.js (base/content/msgSynchronize.js)
content/messenger/folderProps.xul (base/content/folderProps.xul)
content/messenger/folderProps.js (base/content/folderProps.js)
content/messenger/folderWidgets.xml (base/content/folderWidgets.xml)
+ content/messenger/charsetList.xml (base/content/charsetList.xml)
+ content/messenger/charsetList.css (base/content/charsetList.css)
content/messenger/retention.js (base/content/retention.js)
content/messenger/shareglue.js (base/content/shareglue.js)
content/messenger/newFolderDialog.xul (base/content/newFolderDialog.xul)
content/messenger/newFolderDialog.js (base/content/newFolderDialog.js)
* content/messenger/msgAccountCentral.xul (base/content/msgAccountCentral.xul)
content/messenger/msgAccountCentral.js (base/content/msgAccountCentral.js)
content/messenger/msgFolderPickerOverlay.js (base/content/msgFolderPickerOverlay.js)
content/messenger/renameFolderDialog.xul (base/content/renameFolderDialog.xul)