зеркало из https://github.com/mozilla/pjs.git
Bug 291799 Implement Spell as you Type for mailnews
p=me r=neil.parkwaycc.co.uk/mnyromyr sr=bienvenu a=asa
This commit is contained in:
Родитель
e86ace6e20
Коммит
e4d4313227
|
@ -783,6 +783,8 @@
|
||||||
address your message.</li>
|
address your message.</li>
|
||||||
<li><strong>Check Spelling:</strong> Checks the spelling of the message text
|
<li><strong>Check Spelling:</strong> Checks the spelling of the message text
|
||||||
before you send it. You can also click Spell.</li>
|
before you send it. You can also click Spell.</li>
|
||||||
|
<li><strong>Spellcheck As You Type:</strong> Choose this option to have the
|
||||||
|
spelling of the message text checked as you type.</li>
|
||||||
<li><strong>Rewrap:</strong> If you are composing a message using the
|
<li><strong>Rewrap:</strong> If you are composing a message using the
|
||||||
plain-text editor, you can use the Rewrap command to rewrap long lines of
|
plain-text editor, you can use the Rewrap command to rewrap long lines of
|
||||||
quoted text to fit the Compose window. This command rewraps selected quoted
|
quoted text to fit the Compose window. This command rewraps selected quoted
|
||||||
|
@ -4524,6 +4526,9 @@ to filter unwanted mail.</p>
|
||||||
<li><strong>Check spelling before sending</strong>: Select this option to
|
<li><strong>Check spelling before sending</strong>: Select this option to
|
||||||
have Mail & Newsgroups always check the spelling of your message before
|
have Mail & Newsgroups always check the spelling of your message before
|
||||||
you send it.</li>
|
you send it.</li>
|
||||||
|
<li><strong>Check spelling as you type</strong>: Select this option to have
|
||||||
|
Mail & Newsgroups always check the spelling of your message as you type
|
||||||
|
it.</li>
|
||||||
<li><strong>For messages that contain 8-bit characters, use 'quoted
|
<li><strong>For messages that contain 8-bit characters, use 'quoted
|
||||||
printable' MIME encoding</strong>: Choose to have Mail &
|
printable' MIME encoding</strong>: Choose to have Mail &
|
||||||
Newsgroups use <q>quoted printable</q> MIME encoding when sending regular
|
Newsgroups use <q>quoted printable</q> MIME encoding when sending regular
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<script type="application/x-javascript">
|
<script type="application/x-javascript">
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
var _elementIDs = ["forwardMessageMode", "autoSave",
|
var _elementIDs = ["forwardMessageMode", "autoSave",
|
||||||
"autoSaveInterval","spellCheckBeforeSend",
|
"autoSaveInterval","spellCheckBeforeSend", "inlineSpellCheck",
|
||||||
"strictlyMime", "mailWarnOnSendAccelKey",
|
"strictlyMime", "mailWarnOnSendAccelKey",
|
||||||
"wrapLength", "sendDefaultCharsetList",
|
"wrapLength", "sendDefaultCharsetList",
|
||||||
"replyInDefaultCharset", "FontSelect",
|
"replyInDefaultCharset", "FontSelect",
|
||||||
|
@ -28,8 +28,9 @@
|
||||||
|
|
||||||
function Startup()
|
function Startup()
|
||||||
{
|
{
|
||||||
document.getElementById("spellCheckBeforeSend").hidden =
|
var hideSpellCheck = !("@mozilla.org/spellchecker;1" in Components.classes);
|
||||||
!("@mozilla.org/spellchecker;1" in Components.classes);
|
document.getElementById("spellCheckBeforeSend").hidden = hideSpellCheck;
|
||||||
|
document.getElementById("inlineSpellCheck").hidden = hideSpellCheck;
|
||||||
gAutoSaveInterval = document.getElementById("autoSaveInterval");
|
gAutoSaveInterval = document.getElementById("autoSaveInterval");
|
||||||
enableTextbox(document.getElementById("autoSave"), gAutoSaveInterval, true);
|
enableTextbox(document.getElementById("autoSave"), gAutoSaveInterval, true);
|
||||||
}
|
}
|
||||||
|
@ -87,10 +88,16 @@
|
||||||
<label value="&autoSaveEnd.label;"/>
|
<label value="&autoSaveEnd.label;"/>
|
||||||
</hbox>
|
</hbox>
|
||||||
|
|
||||||
|
<hbox align="center">
|
||||||
<checkbox id="spellCheckBeforeSend" label="&spellCheck.label;"
|
<checkbox id="spellCheckBeforeSend" label="&spellCheck.label;"
|
||||||
prefstring="mail.SpellCheckBeforeSend"
|
prefstring="mail.SpellCheckBeforeSend"
|
||||||
accesskey="&spellCheck.accesskey;"/>
|
accesskey="&spellCheck.accesskey;"/>
|
||||||
|
|
||||||
|
<checkbox id="inlineSpellCheck" label="&spellCheckInline.label;"
|
||||||
|
prefstring="mail.spellcheck.inline"
|
||||||
|
accesskey="&spellCheckInline.accesskey;"/>
|
||||||
|
</hbox>
|
||||||
|
|
||||||
<checkbox id="strictlyMime" label="&useMIME.label;"
|
<checkbox id="strictlyMime" label="&useMIME.label;"
|
||||||
prefstring="mail.strictly_mime"
|
prefstring="mail.strictly_mime"
|
||||||
accesskey="&useMIME.accesskey;"/>
|
accesskey="&useMIME.accesskey;"/>
|
||||||
|
|
|
@ -55,6 +55,8 @@
|
||||||
<!ENTITY autoSaveEnd.label "minutes">
|
<!ENTITY autoSaveEnd.label "minutes">
|
||||||
<!ENTITY spellCheck.label "Check spelling before sending">
|
<!ENTITY spellCheck.label "Check spelling before sending">
|
||||||
<!ENTITY spellCheck.accesskey "C">
|
<!ENTITY spellCheck.accesskey "C">
|
||||||
|
<!ENTITY spellCheckInline.label "Check spelling as you type">
|
||||||
|
<!ENTITY spellCheckInline.accesskey "e">
|
||||||
<!-- LOCALIZATION NOTE (wrapOutMsg.label): This will concatenate with "xxx characters", using a number and (char.label). -->
|
<!-- LOCALIZATION NOTE (wrapOutMsg.label): This will concatenate with "xxx characters", using a number and (char.label). -->
|
||||||
<!ENTITY wrapOutMsg.label "Wrap plain text messages at">
|
<!ENTITY wrapOutMsg.label "Wrap plain text messages at">
|
||||||
<!ENTITY wrapOutMsg.accesskey "W">
|
<!ENTITY wrapOutMsg.accesskey "W">
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
* the Initial Developer. All Rights Reserved.
|
* the Initial Developer. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
|
* Ian Neal <bugzilla@arlen.demon.co.uk>
|
||||||
*
|
*
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||||
|
@ -606,6 +607,25 @@ function updateComposeItems() {
|
||||||
} catch(e) {}
|
} catch(e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function openEditorContextMenu()
|
||||||
|
{
|
||||||
|
// if we have a mispelled word, show spellchecker context
|
||||||
|
// menuitems as well as the usual context menu
|
||||||
|
var spellCheckNoSuggestionsItem = document.getElementById('spellCheckNoSuggestions');
|
||||||
|
var word;
|
||||||
|
var misspelledWordStatus = InlineSpellChecker.updateSuggestionsMenu(document.getElementById('msgComposeContext'),
|
||||||
|
spellCheckNoSuggestionsItem, word);
|
||||||
|
|
||||||
|
var hideSpellingItems = (misspelledWordStatus == kSpellNoMispelling);
|
||||||
|
spellCheckNoSuggestionsItem.hidden = hideSpellingItems || misspelledWordStatus != kSpellNoSuggestionsFound;
|
||||||
|
document.getElementById('spellCheckAddToDictionary').hidden = hideSpellingItems;
|
||||||
|
document.getElementById('spellCheckIgnoreWord').hidden = hideSpellingItems;
|
||||||
|
document.getElementById('spellCheckAddSep').hidden = hideSpellingItems;
|
||||||
|
document.getElementById('spellCheckSuggestionsSeparator').hidden = hideSpellingItems;
|
||||||
|
|
||||||
|
updateEditItems();
|
||||||
|
}
|
||||||
|
|
||||||
function updateEditItems() {
|
function updateEditItems() {
|
||||||
goUpdateCommand("cmd_pasteNoFormatting");
|
goUpdateCommand("cmd_pasteNoFormatting");
|
||||||
goUpdateCommand("cmd_pasteQuote");
|
goUpdateCommand("cmd_pasteQuote");
|
||||||
|
@ -1285,6 +1305,8 @@ function ComposeStartup(recycled, aParams)
|
||||||
gMsgCompose.compFields.returnReceipt);
|
gMsgCompose.compFields.returnReceipt);
|
||||||
document.getElementById("cmd_attachVCard").setAttribute('checked',
|
document.getElementById("cmd_attachVCard").setAttribute('checked',
|
||||||
gMsgCompose.compFields.attachVCard);
|
gMsgCompose.compFields.attachVCard);
|
||||||
|
document.getElementById("menu_inlineSpellCheck").setAttribute('checked',
|
||||||
|
sPrefs.getBoolPref("mail.spellcheck.inline"));
|
||||||
|
|
||||||
// If recycle, editor is already created
|
// If recycle, editor is already created
|
||||||
if (!recycled)
|
if (!recycled)
|
||||||
|
@ -1347,8 +1369,7 @@ function ComposeStartup(recycled, aParams)
|
||||||
|
|
||||||
if (recycled)
|
if (recycled)
|
||||||
{
|
{
|
||||||
// This sets charset and does reply quote insertion
|
InitEditor(GetCurrentEditor());
|
||||||
gMsgCompose.initEditor(GetCurrentEditor(), window.content);
|
|
||||||
|
|
||||||
if (gMsgCompose.composeHTML)
|
if (gMsgCompose.composeHTML)
|
||||||
{
|
{
|
||||||
|
@ -1395,7 +1416,7 @@ var gMsgEditorCreationObserver =
|
||||||
{
|
{
|
||||||
var editor = GetCurrentEditor();
|
var editor = GetCurrentEditor();
|
||||||
if (editor && GetCurrentCommandManager() == aSubject)
|
if (editor && GetCurrentCommandManager() == aSubject)
|
||||||
gMsgCompose.initEditor(editor, window.content);
|
InitEditor(editor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1998,6 +2019,43 @@ function SelectAddress()
|
||||||
AdjustFocus();
|
AdjustFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// walk through the recipients list and add them to the inline spell checker ignore list
|
||||||
|
function addRecipientsToIgnoreList(aAddressesToAdd)
|
||||||
|
{
|
||||||
|
if (InlineSpellChecker.inlineSpellChecker && InlineSpellChecker.inlineSpellChecker.enableRealTimeSpell)
|
||||||
|
{
|
||||||
|
// break the list of potentially many recipients back into individual names
|
||||||
|
var hdrParser = Components.classes["@mozilla.org/messenger/headerparser;1"].getService(Components.interfaces.nsIMsgHeaderParser);
|
||||||
|
var emailAddresses = {};
|
||||||
|
var names = {};
|
||||||
|
var fullNames = {};
|
||||||
|
var numAddresses = hdrParser.parseHeadersWithArray(aAddressesToAdd, emailAddresses, names, fullNames);
|
||||||
|
var tokenizedNames = [];
|
||||||
|
|
||||||
|
// each name could consist of multiple words delimited by commas and/or spaces.
|
||||||
|
// i.e. Green Lantern or Lantern,Green.
|
||||||
|
for (var i = 0; i < names.value.length; i++)
|
||||||
|
{
|
||||||
|
var splitNames = names.value[i].match(/[^\s,]+/g);
|
||||||
|
if (splitNames)
|
||||||
|
tokenizedNames = tokenizedNames.concat(splitNames);
|
||||||
|
}
|
||||||
|
|
||||||
|
InlineSpellChecker.inlineSpellChecker.ignoreWords(tokenizedNames, tokenizedNames.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function ToggleInlineSpellChecker(target)
|
||||||
|
{
|
||||||
|
if (InlineSpellChecker.inlineSpellChecker)
|
||||||
|
{
|
||||||
|
InlineSpellChecker.inlineSpellChecker.enableRealTimeSpell = !InlineSpellChecker.inlineSpellChecker.enableRealTimeSpell;
|
||||||
|
|
||||||
|
if (InlineSpellChecker.inlineSpellChecker.enableRealTimeSpell)
|
||||||
|
InlineSpellChecker.checkDocument(window.content.document);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function ToggleReturnReceipt(target)
|
function ToggleReturnReceipt(target)
|
||||||
{
|
{
|
||||||
var msgCompFields = gMsgCompose.compFields;
|
var msgCompFields = gMsgCompose.compFields;
|
||||||
|
@ -2644,6 +2702,9 @@ function LoadIdentity(startup)
|
||||||
// catch the exception and ignore it, so that if LDAP setup
|
// catch the exception and ignore it, so that if LDAP setup
|
||||||
// fails, the entire compose window doesn't end up horked
|
// fails, the entire compose window doesn't end up horked
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// only do this if we aren't starting up....it gets done as part of startup already
|
||||||
|
addRecipientsToIgnoreList(gCurrentIdentity.identityName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3061,3 +3122,16 @@ function AutoSave()
|
||||||
gAutoSaveTimeout = setTimeout(AutoSave, gAutoSaveInterval);
|
gAutoSaveTimeout = setTimeout(AutoSave, gAutoSaveInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function InitEditor(editor)
|
||||||
|
{
|
||||||
|
gMsgCompose.initEditor(editor, window.content);
|
||||||
|
try {
|
||||||
|
InlineSpellChecker.Init(editor, sPrefs.getBoolPref("mail.spellcheck.inline"));
|
||||||
|
// Following line works round bug 292520, look at removing after that is fixed
|
||||||
|
InlineSpellChecker.checkDocument(window.content.document);
|
||||||
|
} catch (e) {
|
||||||
|
// InlineSpellChecker.Init throws if there is no inline spellchecker
|
||||||
|
// so disable menuitem.
|
||||||
|
document.getElementById('menu_inlineSpellCheck').setAttribute('disabled', true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
* the Initial Developer. All Rights Reserved.
|
* the Initial Developer. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
|
* Ian Neal <bugzilla@arlen.demon.co.uk>
|
||||||
*
|
*
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||||
|
@ -57,6 +58,7 @@ var gMimeHeaderParser = null;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var test_addresses_sequence = false;
|
var test_addresses_sequence = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (sPrefs)
|
if (sPrefs)
|
||||||
test_addresses_sequence = sPrefs.getBoolPref("mail.debug.test_addresses_sequence");
|
test_addresses_sequence = sPrefs.getBoolPref("mail.debug.test_addresses_sequence");
|
||||||
|
@ -238,6 +240,10 @@ function CompFields2Recipients(msgCompFields, msgType)
|
||||||
parent.replaceChild(newListBoxNode, listbox);
|
parent.replaceChild(newListBoxNode, listbox);
|
||||||
awFitDummyRows(2);
|
awFitDummyRows(2);
|
||||||
|
|
||||||
|
// CompFields2Recipients is called whenever a user replies or edits an existing message.
|
||||||
|
// We want to add all of the recipients for this message to the ignore list for spell check
|
||||||
|
addRecipientsToIgnoreList((gCurrentIdentity ? gCurrentIdentity.identityName + ', ' : '') + msgTo + ', ' + msgCC + ', ' + msgBCC);
|
||||||
|
|
||||||
gMimeHeaderParser = null; //Release the mime parser
|
gMimeHeaderParser = null; //Release the mime parser
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -365,6 +371,9 @@ function awAddRecipient(recipientType, address)
|
||||||
awAppendNewRow(true);
|
awAppendNewRow(true);
|
||||||
awSetInputAndPopupValue(awGetInputElement(top.MAX_RECIPIENTS), "", awGetPopupElement(top.MAX_RECIPIENTS), "addr_to", top.MAX_RECIPIENTS);
|
awSetInputAndPopupValue(awGetInputElement(top.MAX_RECIPIENTS), "", awGetPopupElement(top.MAX_RECIPIENTS), "addr_to", top.MAX_RECIPIENTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add the recipient to our spell check ignore list
|
||||||
|
addRecipientsToIgnoreList(address);
|
||||||
}
|
}
|
||||||
|
|
||||||
function awTestRowSequence()
|
function awTestRowSequence()
|
||||||
|
@ -491,6 +500,10 @@ function awReturnHit(inputElement)
|
||||||
nextInput.select();
|
nextInput.select();
|
||||||
awSetFocus(row+1, nextInput);
|
awSetFocus(row+1, nextInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// be sure to add the recipient to our ignore list
|
||||||
|
// when the user hits enter in an autocomplete widget...
|
||||||
|
addRecipientsToIgnoreList(inputElement.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
function awDeleteHit(inputElement)
|
function awDeleteHit(inputElement)
|
||||||
|
@ -725,7 +738,7 @@ function _awSetFocus()
|
||||||
|
|
||||||
function awTabFromRecipient(element, event)
|
function awTabFromRecipient(element, event)
|
||||||
{
|
{
|
||||||
//If we are le last element in the listbox, we don't want to create a new row.
|
//If we are the last element in the listbox, we don't want to create a new row.
|
||||||
if (element == awGetInputElement(top.MAX_RECIPIENTS))
|
if (element == awGetInputElement(top.MAX_RECIPIENTS))
|
||||||
top.doNotCreateANewRow = true;
|
top.doNotCreateANewRow = true;
|
||||||
|
|
||||||
|
@ -735,6 +748,10 @@ function awTabFromRecipient(element, event)
|
||||||
var listBox = document.getElementById("addressingWidget");
|
var listBox = document.getElementById("addressingWidget");
|
||||||
listBox.listBoxObject.ensureIndexIsVisible(listBoxRow + 1);
|
listBox.listBoxObject.ensureIndexIsVisible(listBoxRow + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// be sure to add the recipient to our ignore list
|
||||||
|
// when the user tabs out of an autocomplete line...
|
||||||
|
addRecipientsToIgnoreList(element.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
function awTabFromMenulist(element, event)
|
function awTabFromMenulist(element, event)
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
- Ben Goodger <ben@netscape.com> (ass'td polish fixes)
|
- Ben Goodger <ben@netscape.com> (ass'td polish fixes)
|
||||||
- Håkan Waara <hwaara@chello.se>
|
- Håkan Waara <hwaara@chello.se>
|
||||||
- Neil Rashbrook <neil@parkwaycc.co.uk> (ass'td polish fix)
|
- Neil Rashbrook <neil@parkwaycc.co.uk> (ass'td polish fix)
|
||||||
|
- Ian Neal <bugzilla@arlen.demon.co.uk>
|
||||||
-
|
-
|
||||||
- Alternatively, the contents of this file may be used under the terms of
|
- Alternatively, the contents of this file may be used under the terms of
|
||||||
- either of the GNU General Public License Version 2 or later (the "GPL"),
|
- either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||||
|
@ -93,6 +94,7 @@
|
||||||
<script type="application/x-javascript" src="chrome://messenger/content/widgetglue.js"/>
|
<script type="application/x-javascript" src="chrome://messenger/content/widgetglue.js"/>
|
||||||
<script type="application/x-javascript" src="chrome://messenger/content/mail-offline.js"/>
|
<script type="application/x-javascript" src="chrome://messenger/content/mail-offline.js"/>
|
||||||
<script type="application/x-javascript" src="chrome://editor/content/editor.js"/>
|
<script type="application/x-javascript" src="chrome://editor/content/editor.js"/>
|
||||||
|
<script type="application/x-javascript" src="chrome://editor/content/editorInlineSpellCheck.js"/>
|
||||||
<script type="application/x-javascript" src="chrome://messenger/content/messengercompose/MsgComposeCommands.js"/>
|
<script type="application/x-javascript" src="chrome://messenger/content/messengercompose/MsgComposeCommands.js"/>
|
||||||
|
|
||||||
<!-- drag and drop -->
|
<!-- drag and drop -->
|
||||||
|
@ -208,7 +210,16 @@
|
||||||
<keyset id="editorKeys"/>
|
<keyset id="editorKeys"/>
|
||||||
|
|
||||||
<popup id="sidebarPopup"/>
|
<popup id="sidebarPopup"/>
|
||||||
<popup id="msgComposeContext" onpopupshowing="updateEditItems();">
|
|
||||||
|
<popup id="msgComposeContext" onpopupshowing="openEditorContextMenu();">
|
||||||
|
<menuitem id="spellCheckNoSuggestions" label="&spellCheckNoSuggestions.label;" disabled="true"/>
|
||||||
|
<menuseparator id="spellCheckAddSep"/>
|
||||||
|
<menuitem id="spellCheckAddToDictionary" label="&spellCheckAddToDictionary.label;" accesskey="&spellCheckAddToDictionary.accesskey;"
|
||||||
|
oncommand="InlineSpellChecker.addToDictionary(null,null);"/>
|
||||||
|
<menuitem id="spellCheckIgnoreWord" label="&spellCheckIgnoreWord.label;" accesskey="&spellCheckIgnoreWord.accesskey;"
|
||||||
|
oncommand="InlineSpellChecker.ignoreWord(null, null)"/>
|
||||||
|
<menuseparator id="spellCheckSuggestionsSeparator"/>
|
||||||
|
|
||||||
<menuitem label="&undo.label;" accesskey="&undo.accesskey;" command="cmd_undo"/>
|
<menuitem label="&undo.label;" accesskey="&undo.accesskey;" command="cmd_undo"/>
|
||||||
<menuseparator/>
|
<menuseparator/>
|
||||||
<menuitem label="&cut.label;" accesskey="&cut.accesskey;" command="cmd_cut"/>
|
<menuitem label="&cut.label;" accesskey="&cut.accesskey;" command="cmd_cut"/>
|
||||||
|
@ -329,6 +340,9 @@
|
||||||
<menupopup id="optionsMenuPopup" onpopupshowing="updateOptionItems();">
|
<menupopup id="optionsMenuPopup" onpopupshowing="updateOptionItems();">
|
||||||
<menuitem label="&selectAddressCmd.label;" accesskey="&selectAddressCmd.accesskey;" command="cmd_selectAddress"/>
|
<menuitem label="&selectAddressCmd.label;" accesskey="&selectAddressCmd.accesskey;" command="cmd_selectAddress"/>
|
||||||
<menuitem label="&checkSpellingCmd.label;" id="menu_checkspelling" accesskey="&checkSpellingCmd.accesskey;" key="key_checkspelling" command="cmd_spelling"/>
|
<menuitem label="&checkSpellingCmd.label;" id="menu_checkspelling" accesskey="&checkSpellingCmd.accesskey;" key="key_checkspelling" command="cmd_spelling"/>
|
||||||
|
<menuitem label="&enableInlineSpellChecker.label;" id="menu_inlineSpellCheck"
|
||||||
|
accesskey="&enableInlineSpellChecker.accesskey;" type="checkbox"
|
||||||
|
oncommand="ToggleInlineSpellChecker(event.target)"/>
|
||||||
<menuitem label=""eCmd.label;" accesskey=""eCmd.accesskey;" command="cmd_quoteMessage"/>
|
<menuitem label=""eCmd.label;" accesskey=""eCmd.accesskey;" command="cmd_quoteMessage"/>
|
||||||
<menuseparator/>
|
<menuseparator/>
|
||||||
<menuitem id="returnReceiptMenu" type="checkbox" label="&returnReceiptMenu.label;" accesskey="&returnReceiptMenu.accesskey;" checked="false" oncommand="ToggleReturnReceipt(event.target)"/>
|
<menuitem id="returnReceiptMenu" type="checkbox" label="&returnReceiptMenu.label;" accesskey="&returnReceiptMenu.accesskey;" checked="false" oncommand="ToggleReturnReceipt(event.target)"/>
|
||||||
|
|
|
@ -1,217 +0,0 @@
|
||||||
<!--LOCALIZATION NOTE messengercompose.dtd Main UI for message composition -->
|
|
||||||
<!ENTITY msgComposeWindow.title "Compose: (no subject)">
|
|
||||||
|
|
||||||
<!ENTITY fromAddr.label "From:">
|
|
||||||
<!ENTITY fromAddr.accesskey "r">
|
|
||||||
<!ENTITY subject.label "Subject:">
|
|
||||||
<!ENTITY subject.accesskey "S">
|
|
||||||
<!ENTITY attachments.label "Attachments:">
|
|
||||||
<!ENTITY attachments.accesskey "c">
|
|
||||||
|
|
||||||
<!-- menu items: the . means that the menu item isn't implemented yet -->
|
|
||||||
|
|
||||||
<!-- File menu items -->
|
|
||||||
<!ENTITY newMessage.label "Message">
|
|
||||||
<!ENTITY newMessage.accesskey "M">
|
|
||||||
<!ENTITY saveCmd.label "Save">
|
|
||||||
<!ENTITY saveCmd.key "S">
|
|
||||||
<!ENTITY saveCmd.accesskey "s">
|
|
||||||
<!ENTITY saveAsCmd.label "Save As">
|
|
||||||
<!ENTITY saveAsCmd.accesskey "A">
|
|
||||||
<!ENTITY saveAsFileCmd.label "File...">
|
|
||||||
<!ENTITY saveAsFileCmd.accesskey "F">
|
|
||||||
<!ENTITY saveAsDraftCmd.label "Draft">
|
|
||||||
<!ENTITY saveAsDraftCmd.accesskey "D">
|
|
||||||
<!ENTITY saveAsTemplateCmd.label "Template">
|
|
||||||
<!ENTITY saveAsTemplateCmd.accesskey "T">
|
|
||||||
<!ENTITY attachMenu.label "Attach">
|
|
||||||
<!ENTITY attachMenu.accesskey "t">
|
|
||||||
<!ENTITY attachFileCmd.label "File(s)...">
|
|
||||||
<!ENTITY attachFileCmd.key "">
|
|
||||||
<!ENTITY attachFileCmd.accesskey "F">
|
|
||||||
<!ENTITY attachPageCmd.label "Web Page...">
|
|
||||||
<!ENTITY attachPageCmd.accesskey "W">
|
|
||||||
<!--LOCALIZATION NOTE attachVCardCmd.label Don't translate the term 'vCard' -->
|
|
||||||
<!ENTITY attachVCardCmd.label "Personal Card (vCard)">
|
|
||||||
<!ENTITY attachVCardCmd.accesskey "P">
|
|
||||||
<!ENTITY sendNowCmd.label "Send Now">
|
|
||||||
<!ENTITY sendCmd.keycode "VK_RETURN">
|
|
||||||
<!ENTITY sendNowCmd.accesskey "d">
|
|
||||||
<!ENTITY sendLaterCmd.label "Send Later">
|
|
||||||
<!ENTITY sendLaterCmd.keycode "VK_RETURN">
|
|
||||||
<!ENTITY sendLaterCmd.accesskey "L">
|
|
||||||
<!ENTITY printSetupCmd.label "Page Setup...">
|
|
||||||
<!ENTITY printSetupCmd.accesskey "u">
|
|
||||||
<!ENTITY printCmd.label "Print...">
|
|
||||||
<!ENTITY printCmd.key "P">
|
|
||||||
<!ENTITY printCmd.accesskey "P">
|
|
||||||
<!ENTITY closeCmd.label "Close">
|
|
||||||
|
|
||||||
<!-- Edit menu items -->
|
|
||||||
<!ENTITY editRewrapCmd.label "Rewrap">
|
|
||||||
<!ENTITY editRewrapCmd.accesskey "w">
|
|
||||||
<!ENTITY findCmd.label "Find and Replace...">
|
|
||||||
<!ENTITY findCmd.key "F">
|
|
||||||
<!ENTITY findCmd.accesskey "F">
|
|
||||||
<!ENTITY findAgainCmd.label "Find Again">
|
|
||||||
<!ENTITY findAgainCmd.key "G">
|
|
||||||
<!ENTITY findAgainCmd.accesskey "g">
|
|
||||||
<!ENTITY findAgainCmd.key2 "VK_F3">
|
|
||||||
<!ENTITY findPrevCmd.label "Find Previous">
|
|
||||||
<!ENTITY findPrevCmd.key "G">
|
|
||||||
<!ENTITY findPrevCmd.key2 "VK_F3">
|
|
||||||
<!ENTITY findPrevCmd.accesskey "v">
|
|
||||||
<!ENTITY accountManagerCmd.label "Mail & Newsgroups Account Settings...">
|
|
||||||
<!ENTITY accountManagerCmd.accesskey "m">
|
|
||||||
|
|
||||||
<!-- View menu items -->
|
|
||||||
<!ENTITY showComposeToolbarCmd.label "Mail Toolbar">
|
|
||||||
<!ENTITY showComposeToolbarCmd.accesskey "o">
|
|
||||||
<!ENTITY showFormatToolbarCmd.label "Formatting Toolbar">
|
|
||||||
<!ENTITY showFormatToolbarCmd.accesskey "F">
|
|
||||||
<!ENTITY showParagraphMarksCmd.label ".Show Paragraph Marks">
|
|
||||||
<!ENTITY pageSourceCmd.label ".Page Source">
|
|
||||||
<!ENTITY pageSourceCmd.accesskey "u">
|
|
||||||
<!ENTITY pageInfoCmd.label ".Page Info">
|
|
||||||
<!ENTITY pageInfoCmd.accesskey "I">
|
|
||||||
<!ENTITY dcharMenu.label "Character Set">
|
|
||||||
<!ENTITY dcharIso1Cmd.label "Western (ISO-8859-1)">
|
|
||||||
<!ENTITY dcharIso2Cmd.label "Central European (ISO-8859-2)">
|
|
||||||
<!ENTITY dcharIso3Cmd.label "South European (ISO-8859-3)">
|
|
||||||
<!ENTITY dcharIso4Cmd.label "Baltic (ISO-8859-4)">
|
|
||||||
<!ENTITY dcharIso9Cmd.label "Turkish (ISO-8859-9)">
|
|
||||||
<!ENTITY dcharIso10Cmd.label "Nordic (ISO-8859-10)">
|
|
||||||
<!ENTITY dcharIso14Cmd.label "Celtic (ISO-8859-14)">
|
|
||||||
<!ENTITY dcharIso15Cmd.label "Western (ISO-8859-15)">
|
|
||||||
<!ENTITY dcharJapanCmd.label "Japanese (ISO-2022-JP)">
|
|
||||||
<!ENTITY dcharTradChiBigCmd.label "Chinese Traditional (Big5)">
|
|
||||||
<!ENTITY dcharSimpChiGbCmd.label "Chinese Simplified (GB2312)">
|
|
||||||
<!ENTITY dcharKoreanCmd.label "Korean (EUC-KR)">
|
|
||||||
<!ENTITY dcharUtf8Cmd.label "Unicode (UTF-8)">
|
|
||||||
<!ENTITY dcharRusCmd.label "Cyrillic (KOI8-R)">
|
|
||||||
<!ENTITY dcharUkrCmd.label "Cyrillic/Ukrainian (KOI8-U)">
|
|
||||||
<!ENTITY dcharIsoGreekCmd.label "Greek (ISO-8859-7)">
|
|
||||||
<!ENTITY dcharVietViCmd.label "Vietnamese (VISCII)">
|
|
||||||
<!ENTITY dcharThaiCmd.label "Thai (TIS-620)">
|
|
||||||
<!ENTITY dcharArmCmd.label "Armenian (ARMSCII-8)">
|
|
||||||
<!ENTITY dcharDEFAULT.label "Set Default Mail Send Character Set">
|
|
||||||
|
|
||||||
<!-- Format menu items -->
|
|
||||||
<!ENTITY formatMenu.label "Format">
|
|
||||||
<!ENTITY formatMenu.accesskey "o">
|
|
||||||
|
|
||||||
<!-- Options menu items -->
|
|
||||||
<!ENTITY optionsMenu.label "Options">
|
|
||||||
<!ENTITY optionsMenu.accesskey "p">
|
|
||||||
|
|
||||||
<!ENTITY doNotCompleteAddrCmd.label ".Do Not Complete Address">
|
|
||||||
<!ENTITY showMatchingAddrCmd.label ".Show Matching Address">
|
|
||||||
|
|
||||||
<!ENTITY addSignatureCmd.label ".Add Signature File">
|
|
||||||
|
|
||||||
<!ENTITY quoteCmd.label "Quote Message">
|
|
||||||
<!ENTITY quoteCmd.accesskey "Q">
|
|
||||||
<!ENTITY selectAddressCmd.label "Select Addresses...">
|
|
||||||
<!ENTITY selectAddressCmd.key "">
|
|
||||||
<!ENTITY selectAddressCmd.accesskey "A">
|
|
||||||
|
|
||||||
<!ENTITY checkSpellingCmd.label "Check Spelling...">
|
|
||||||
<!ENTITY checkSpellingCmd.key "K">
|
|
||||||
<!ENTITY checkSpellingCmd.accesskey "S">
|
|
||||||
|
|
||||||
<!ENTITY priorityMenu.label "Priority">
|
|
||||||
<!ENTITY priorityMenu.accesskey "p">
|
|
||||||
<!ENTITY lowestPriorityCmd.label "Lowest">
|
|
||||||
<!ENTITY lowestPriorityCmd.accesskey "l">
|
|
||||||
<!ENTITY lowPriorityCmd.label "Low">
|
|
||||||
<!ENTITY lowPriorityCmd.accesskey "o">
|
|
||||||
<!ENTITY normalPriorityCmd.label "Normal">
|
|
||||||
<!ENTITY normalPriorityCmd.accesskey "n">
|
|
||||||
<!ENTITY highPriorityCmd.label "High">
|
|
||||||
<!ENTITY highPriorityCmd.accesskey "i">
|
|
||||||
<!ENTITY highestPriorityCmd.label "Highest">
|
|
||||||
<!ENTITY highestPriorityCmd.accesskey "H">
|
|
||||||
|
|
||||||
<!ENTITY returnReceiptMenu.label "Return Receipt">
|
|
||||||
<!ENTITY returnReceiptMenu.accesskey "t">
|
|
||||||
<!ENTITY outputFormatMenu.label "Format">
|
|
||||||
<!ENTITY outputFormatMenu.accesskey "f">
|
|
||||||
<!ENTITY autoFormatCmd.label "Auto-Detect">
|
|
||||||
<!ENTITY autoFormatCmd.accesskey "a">
|
|
||||||
<!ENTITY plainTextFormatCmd.label "Plain Text Only">
|
|
||||||
<!ENTITY plainTextFormatCmd.accesskey "p">
|
|
||||||
<!ENTITY htmlFormatCmd.label "Rich Text (HTML) Only">
|
|
||||||
<!ENTITY htmlFormatCmd.accesskey "r">
|
|
||||||
<!ENTITY bothFormatCmd.label "Plain and Rich (HTML) Text">
|
|
||||||
<!ENTITY bothFormatCmd.accesskey "l">
|
|
||||||
|
|
||||||
<!ENTITY UuencodeAttachmentCmd.label "Uuencode instead of MIME for Attachments">
|
|
||||||
|
|
||||||
|
|
||||||
<!ENTITY fileCarbonCopyCmd.label "Send a Copy To">
|
|
||||||
<!ENTITY fileCarbonCopyCmd.accesskey "d">
|
|
||||||
<!ENTITY fileHereMenu.label "File Here">
|
|
||||||
|
|
||||||
<!--LOCALIZATION NOTE Debug Menu Don't translate anything in the Debug menu section -->
|
|
||||||
<!-- Debug Menu, imported from editorAppShell.dtd -->
|
|
||||||
<!ENTITY debugMenu.label "Debug">
|
|
||||||
<!ENTITY outputTextCmd.label "Output Text">
|
|
||||||
<!ENTITY outputHTMLCmd.label "Output HTML">
|
|
||||||
<!ENTITY insertTextCmd.label "Insert Text">
|
|
||||||
<!ENTITY testSelectionCmd.label "Test Selection">
|
|
||||||
<!ENTITY testTableLayoutCmd.label "Test Table Layout">
|
|
||||||
<!ENTITY testDocumentCmd.label "Test Document">
|
|
||||||
<!ENTITY showEmbeddedCmd.label "Show Embedded Objects">
|
|
||||||
<!ENTITY dumpContentCmd.label "Dump Content Tree">
|
|
||||||
<!ENTITY runUnitTestsCmd.label "Run Unit Tests">
|
|
||||||
<!ENTITY startLogCmd.label "Start Log">
|
|
||||||
<!ENTITY stopLogCmd.label "Stop Log">
|
|
||||||
<!ENTITY runLogCmd.label "Run Log">
|
|
||||||
|
|
||||||
<!--LOCALIZATION NOTE Toolbar items Don't change any "chrome://" URLs -->
|
|
||||||
<!-- Toolbar items -->
|
|
||||||
<!ENTITY sendButton.label "Send">
|
|
||||||
<!ENTITY quoteButton.label "Quote">
|
|
||||||
<!ENTITY addressButton.label "Address">
|
|
||||||
<!ENTITY attachButton.label "Attach">
|
|
||||||
<!ENTITY spellingButton.label "Spelling">
|
|
||||||
<!ENTITY saveButton.label "Save">
|
|
||||||
<!ENTITY stopButton.label "Stop">
|
|
||||||
|
|
||||||
<!--tooltips-->
|
|
||||||
<!-- We already inherit &menuBar.tooltip and &mailToolbar.tooltip from messenger.dtd -->
|
|
||||||
<!ENTITY addressBar.tooltip "Address Bar">
|
|
||||||
<!ENTITY formatToolbar.tooltip "Formatting Toolbar">
|
|
||||||
<!ENTITY sendButton.tooltip "Send this message now">
|
|
||||||
<!ENTITY sendlaterButton.tooltip "Send this message later">
|
|
||||||
<!ENTITY quoteButton.tooltip "Quote the previous message">
|
|
||||||
<!ENTITY addressButton.tooltip "Select a recipient from an Address Book">
|
|
||||||
<!ENTITY attachButton.tooltip "Include an attachment">
|
|
||||||
<!ENTITY saveButton.tooltip "Save this message">
|
|
||||||
<!ENTITY stopButton.tooltip "Stop the current transfer">
|
|
||||||
|
|
||||||
<!-- Toolbar items, imported from editorAppShell.xul -->
|
|
||||||
<!--LOCALIZATION NOTE formatToolbar. Don't change any of these Style Characters -->
|
|
||||||
<!ENTITY formatToolbar.boldChar "B">
|
|
||||||
<!ENTITY formatToolbar.italicChar "I">
|
|
||||||
<!ENTITY formatToolbar.underlineChar "U">
|
|
||||||
|
|
||||||
<!-- context menu items -->
|
|
||||||
<!ENTITY undo.label "Undo">
|
|
||||||
<!ENTITY undo.accesskey "U">
|
|
||||||
<!ENTITY cut.label "Cut">
|
|
||||||
<!ENTITY cut.accesskey "t">
|
|
||||||
<!ENTITY copy.label "Copy">
|
|
||||||
<!ENTITY copy.accesskey "C">
|
|
||||||
<!ENTITY paste.label "Paste">
|
|
||||||
<!ENTITY paste.accesskey "P">
|
|
||||||
<!ENTITY pasteQuote.label "Paste As Quotation">
|
|
||||||
<!ENTITY pasteQuote.accesskey "Q">
|
|
||||||
<!ENTITY delete.label "Delete">
|
|
||||||
<!ENTITY delete.accesskey "D">
|
|
||||||
<!ENTITY selectAll.label "Select All">
|
|
||||||
<!ENTITY selectAll.accesskey "A">
|
|
||||||
<!ENTITY attachFile.label "Attach File(s)...">
|
|
||||||
<!ENTITY attachFile.accesskey "F">
|
|
||||||
<!ENTITY attachPage.label "Attach Web Page...">
|
|
||||||
<!ENTITY attachPage.accesskey "W">
|
|
|
@ -510,6 +510,7 @@ pref("mailnews.nav_crosses_folders", 1); // prompt user when crossing folders
|
||||||
pref("news.cancel.confirm",true);
|
pref("news.cancel.confirm",true);
|
||||||
pref("news.cancel.alert_on_success",true);
|
pref("news.cancel.alert_on_success",true);
|
||||||
pref("mail.SpellCheckBeforeSend",false);
|
pref("mail.SpellCheckBeforeSend",false);
|
||||||
|
pref("mail.spellcheck.inline",true);
|
||||||
pref("mail.warn_on_send_accel_key", true);
|
pref("mail.warn_on_send_accel_key", true);
|
||||||
pref("mail.enable_autocomplete",true);
|
pref("mail.enable_autocomplete",true);
|
||||||
pref("mailnews.html_domains","");
|
pref("mailnews.html_domains","");
|
||||||
|
|
Загрузка…
Ссылка в новой задаче