Bug 1524508 - [de-xbl] convert charsetpicker binding to customized built-in based on menulist. r=pmorris

--HG--
rename : mailnews/base/content/charsetList.xml => mailnews/base/content/menulist-charsetpicker.js
This commit is contained in:
Magnus Melin 2019-03-16 23:07:01 +01:00
Родитель e4f355ad26
Коммит f19c904d38
8 изменённых файлов: 119 добавлений и 103 удалений

Просмотреть файл

@ -1,11 +1,9 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- <!-- This Source Code Form is subject to the terms of the Mozilla Public
- 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 - 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/. --> - file, You can obtain one at https://mozilla.org/MPL/2.0/. -->
<?xml-stylesheet href="chrome://global/skin/"?> <?xml-stylesheet href="chrome://global/skin/"?>
<?xml-stylesheet href="chrome://messenger/content/charsetList.css"?>
<?xml-stylesheet href="chrome://messenger/skin/preferences/preferences.css"?> <?xml-stylesheet href="chrome://messenger/skin/preferences/preferences.css"?>
<!DOCTYPE dialog [ <!DOCTYPE dialog [
@ -32,6 +30,7 @@
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/> <script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<script type="application/javascript" src="chrome://mozapps/content/preferences/fontbuilder.js"/> <script type="application/javascript" src="chrome://mozapps/content/preferences/fontbuilder.js"/>
<script type="application/javascript" src="chrome://messenger/content/preferences/fonts.js"/> <script type="application/javascript" src="chrome://messenger/content/preferences/fonts.js"/>
<script type="application/javascript" src="chrome://messenger/content/menulist-charsetpicker.js"/>
<linkset> <linkset>
<html:link rel="localization" href="messenger/preferences/fonts.ftl"/> <html:link rel="localization" href="messenger/preferences/fonts.ftl"/>
</linkset> </linkset>
@ -284,7 +283,7 @@
<label control="sendDefaultCharsetList" <label control="sendDefaultCharsetList"
value="&sendDefaultCharset.label;" value="&sendDefaultCharset.label;"
accesskey="&sendDefaultCharset.accesskey;"/> accesskey="&sendDefaultCharset.accesskey;"/>
<menulist id="sendDefaultCharsetList" type="charset" <menulist is="menulist-charsetpicker" id="sendDefaultCharsetList"
subset="sending" subset="sending"
preference="mailnews.send_default_charset"/> preference="mailnews.send_default_charset"/>
</row> </row>
@ -293,7 +292,7 @@
<label control="viewDefaultCharsetList" <label control="viewDefaultCharsetList"
value="&viewDefaultCharsetList.label;" value="&viewDefaultCharsetList.label;"
accesskey="&viewDefaultCharsetList.accesskey;"/> accesskey="&viewDefaultCharsetList.accesskey;"/>
<menulist id="viewDefaultCharsetList" type="charset" <menulist is="menulist-charsetpicker" id="viewDefaultCharsetList"
subset="viewing" subset="viewing"
preference="mailnews.view_default_charset"/> preference="mailnews.view_default_charset"/>
</row> </row>

Просмотреть файл

@ -1,5 +0,0 @@
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
menulist[type="charset"] {
-moz-binding: url("chrome://messenger/content/charsetList.xml#charsetpicker");
}

Просмотреть файл

@ -1,67 +0,0 @@
<?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://messenger/content/menulist.xml#xbl-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"];
const {Services} = ChromeUtils.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 appropriate menu item corresponding to preference stored
// value.
if (this.hasAttribute("preference")) {
let preference = Services.prefs.getComplexValue(
this.getAttribute("preference"), Ci.nsIPrefLocalizedString);
this.value = preference.data;
}
]]></constructor>
</implementation>
</binding>
</bindings>

Просмотреть файл

@ -1,13 +1,10 @@
<?xml version="1.0"?> <!-- -*- Mode: SGML; indent-tabs-mode: nil; -*- --> <?xml version="1.0"?> <!-- -*- Mode: SGML; indent-tabs-mode: nil; -*- -->
<!-- <!-- This Source Code Form is subject to the terms of the Mozilla Public
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 - 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/. --> - file, You can obtain one at https://mozilla.org/MPL/2.0/. -->
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?> <?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/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"> <!DOCTYPE dialog SYSTEM "chrome://messenger/locale/folderProps.dtd">
@ -24,12 +21,7 @@
<script type="application/javascript" src="chrome://global/content/globalOverlay.js"/> <script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
<script type="application/javascript" src="chrome://messenger/content/retention.js"/> <script type="application/javascript" src="chrome://messenger/content/retention.js"/>
<script type="application/javascript" src="chrome://messenger/content/folderProps.js"/> <script type="application/javascript" src="chrome://messenger/content/folderProps.js"/>
<script type="application/javascript"> <script type="application/javascript" src="chrome://messenger/content/menulist-charsetpicker.js"/>
<![CDATA[
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
Services.obs.notifyObservers(null, "charsetmenu-selected", "other");
]]>
</script>
<tabbox id="folderPropTabBox"> <tabbox id="folderPropTabBox">
<tabs id="folderPropTabs"> <tabs id="folderPropTabs">
@ -75,7 +67,7 @@
<label value="&folderCharsetFallback2.label;" <label value="&folderCharsetFallback2.label;"
accesskey="&folderCharsetFallback2.accesskey;" accesskey="&folderCharsetFallback2.accesskey;"
control="folderCharsetList"/> control="folderCharsetList"/>
<menulist id="folderCharsetList" type="charset"/> <menulist is="menulist-charsetpicker" id="folderCharsetList" subset="viewing"/>
</hbox> </hbox>
<checkbox class="indent" id="folderCharsetOverride" <checkbox class="indent" id="folderCharsetOverride"
label="&folderCharsetEnforce2.label;" label="&folderCharsetEnforce2.label;"

Просмотреть файл

@ -0,0 +1,104 @@
/* 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 https://mozilla.org/MPL/2.0/. */
customElements.whenDefined("menulist").then(() => {
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
/**
* MozMenulistCharsetpicker is a menulist widget that is automatically
* populated with charset selections.
* - Setting subset="sending" will show the values applicable for sending
* - Setting subset="viewing" will show the values applicable for viewing
* - Setting preference="<name>" will set the selected value to that of the named preference value
* @extends {MozMenuList}
*/
class MozMenulistCharsetpicker extends customElements.get("menulist") {
static get observedAttributes() {
return ["subset", "preference"];
}
connectedCallback() {
super.connectedCallback();
if (this.delayConnectedCallback()) {
return;
}
if (this.menupopup) {
return;
}
this._setupCharsets();
this._setupSelectedValueFromPref();
}
_setupCharsets() {
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") == "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",
];
}
let charsetBundle = Services.strings.createBundle(
"chrome://messenger/locale/charsetTitles.properties");
let menuLabels = charsetValues.map((item) => {
let strCharset = charsetBundle.GetStringFromName(
item.toLowerCase() + ".title");
return { label: strCharset, value: item };
});
menuLabels.sort((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((item) => {
this.appendItem(item.label, item.value);
});
}
_setupSelectedValueFromPref() {
// Set appropriate selected menu item based on preference value.
if (this.hasAttribute("preference")) {
let preference = Services.prefs.getComplexValue(
this.getAttribute("preference"), Ci.nsIPrefLocalizedString);
this.value = preference.data;
}
}
attributeChangedCallback() {
super.attributeChangedCallback();
if (!this.isConnectedAndReady) {
return;
}
this._updateAttributes();
}
_updateAttributes() {
this.removeAllItems();
this._setupCharsets();
this._setupSelectedValueFromPref();
}
}
customElements.define("menulist-charsetpicker", MozMenulistCharsetpicker, { extends: "menulist" });
});
// The menulist CE is defined lazily. Create one now to get menulist defined,
// allowing us to inherit from it.
if (!customElements.get("menulist")) {
delete document.createElement("menulist");
}

Просмотреть файл

@ -112,8 +112,6 @@ function onPreInit(account, accountValues)
var type = parent.getAccountValue(account, accountValues, "server", "type", null, false); var type = parent.getAccountValue(account, accountValues, "server", "type", null, false);
hideShowControls(type); hideShowControls(type);
Services.obs.notifyObservers(null, "charsetmenu-selected", "other");
gServer = account.incomingServer; gServer = account.incomingServer;
if(!account.incomingServer.canEmptyTrashOnExit) if(!account.incomingServer.canEmptyTrashOnExit)

Просмотреть файл

@ -1,15 +1,11 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
<!--
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 - 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/. --> - file, You can obtain one at https://mozilla.org/MPL/2.0/. -->
<?xml-stylesheet href="chrome://messenger/skin/accountManage.css" type="text/css"?> <?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/messenger.css" type="text/css"?>
<?xml-stylesheet href="chrome://messenger/skin/folderMenus.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 [ <!DOCTYPE page [
<!ENTITY % trashDTD SYSTEM "chrome://messenger/locale/am-server-top.dtd"> <!ENTITY % trashDTD SYSTEM "chrome://messenger/locale/am-server-top.dtd">
@ -25,6 +21,7 @@
<script type="application/javascript" src="chrome://messenger/content/am-server.js"/> <script type="application/javascript" src="chrome://messenger/content/am-server.js"/>
<script type="application/javascript" src="chrome://messenger/content/am-prefs.js"/> <script type="application/javascript" src="chrome://messenger/content/am-prefs.js"/>
<script type="application/javascript" src="chrome://messenger/content/amUtils.js"/> <script type="application/javascript" src="chrome://messenger/content/amUtils.js"/>
<script type="application/javascript" src="chrome://messenger/content/menulist-charsetpicker.js"/>
<stringbundle id="bundle_messenger" src="chrome://messenger/locale/messenger.properties"/> <stringbundle id="bundle_messenger" src="chrome://messenger/locale/messenger.properties"/>
<label hidden="true" wsm_persist="true" id="server.type"/> <label hidden="true" wsm_persist="true" id="server.type"/>
@ -459,11 +456,10 @@
<hbox hidefor="imap,pop3,movemail" align="center" valign="middle" iscontrolcontainer="true"> <hbox hidefor="imap,pop3,movemail" align="center" valign="middle" iscontrolcontainer="true">
<label value="&serverDefaultCharset2.label;" control="nntp.charset"/> <label value="&serverDefaultCharset2.label;" control="nntp.charset"/>
<menulist hidable="true" <menulist is="menulist-charsetpicker" id="nntp.charset" subset="viewing"
type="charset" hidable="true"
hidefor="imap,pop3,movemail" hidefor="imap,pop3,movemail"
wsm_persist="true" wsm_persist="true"
id="nntp.charset"
preftype="string" preftype="string"
prefstring="mail.server.%serverkey%.charset"/> prefstring="mail.server.%serverkey%.charset"/>
</hbox> </hbox>

Просмотреть файл

@ -63,10 +63,9 @@ messenger.jar:
content/messenger/msgSynchronize.xul (base/content/msgSynchronize.xul) content/messenger/msgSynchronize.xul (base/content/msgSynchronize.xul)
content/messenger/msgSynchronize.js (base/content/msgSynchronize.js) content/messenger/msgSynchronize.js (base/content/msgSynchronize.js)
content/messenger/folderProps.xul (base/content/folderProps.xul) content/messenger/folderProps.xul (base/content/folderProps.xul)
content/messenger/menulist-charsetpicker.js (base/content/menulist-charsetpicker.js)
content/messenger/folderProps.js (base/content/folderProps.js) content/messenger/folderProps.js (base/content/folderProps.js)
content/messenger/folderWidgets.xml (base/content/folderWidgets.xml) 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/newFolderDialog.xul (base/content/newFolderDialog.xul) content/messenger/newFolderDialog.xul (base/content/newFolderDialog.xul)
content/messenger/newFolderDialog.js (base/content/newFolderDialog.js) content/messenger/newFolderDialog.js (base/content/newFolderDialog.js)
* content/messenger/msgAccountCentral.xul (base/content/msgAccountCentral.xul) * content/messenger/msgAccountCentral.xul (base/content/msgAccountCentral.xul)