Bug 1448946 - remove trailing spaces in editor. rs=white-space-only
authorJorg K <jorgk@jorgk.com>
Sat, 31 Mar 2018 12:50:02 +0200
changeset 30758 f466d0abed9f578f55e5921b7cc88e38a2778b61
parent 30757 2283e76717f9c6b58dc3c6270089bf996e5deff5
child 30759 1ff14a05b2a11739c1bc68ccee89f2804ba233f8
push id2198
push userclokep@gmail.com
push dateMon, 07 May 2018 22:01:28 +0000
treeherdercomm-beta@c31c128cd17a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerswhite-space-only
bugs1448946
Bug 1448946 - remove trailing spaces in editor. rs=white-space-only [skip-blame]
editor/ui/composer.js
editor/ui/composer/content/EditorAllTags.css
editor/ui/composer/content/EditorContent.css
editor/ui/composer/content/EditorContextMenu.js
editor/ui/composer/content/composerOverlay.xul
editor/ui/composer/content/editor.js
editor/ui/composer/content/editorApplicationOverlay.js
editor/ui/composer/content/editorMailOverlay.xul
editor/ui/composer/content/editorNavigatorOverlay.xul
editor/ui/composer/content/editorPrefsOverlay.xul
editor/ui/composer/content/editorSmileyOverlay.xul
editor/ui/composer/content/editorTasksOverlay.xul
editor/ui/composer/content/pref-editing.js
editor/ui/composer/content/pref-editing.xul
editor/ui/composer/content/pref-toolbars.xul
editor/ui/composer/content/publishprefs.js
editor/ui/dialogs/content/EdAEAttributes.js
editor/ui/dialogs/content/EdAECSSAttributes.js
editor/ui/dialogs/content/EdAEHTMLAttributes.js
editor/ui/dialogs/content/EdAEJSEAttributes.js
editor/ui/dialogs/content/EdAdvancedEdit.js
editor/ui/dialogs/content/EdAdvancedEdit.xul
editor/ui/dialogs/content/EdButtonProps.xul
editor/ui/dialogs/content/EdColorPicker.js
editor/ui/dialogs/content/EdColorPicker.xul
editor/ui/dialogs/content/EdColorProps.js
editor/ui/dialogs/content/EdColorProps.xul
editor/ui/dialogs/content/EdConvertToTable.js
editor/ui/dialogs/content/EdConvertToTable.xul
editor/ui/dialogs/content/EdDialogCommon.js
editor/ui/dialogs/content/EdDialogTemplate.js
editor/ui/dialogs/content/EdDialogTemplate.xul
editor/ui/dialogs/content/EdDictionary.js
editor/ui/dialogs/content/EdDictionary.xul
editor/ui/dialogs/content/EdFieldSetProps.js
editor/ui/dialogs/content/EdFieldSetProps.xul
editor/ui/dialogs/content/EdFormProps.xul
editor/ui/dialogs/content/EdHLineProps.js
editor/ui/dialogs/content/EdImageOverlay.xul
editor/ui/dialogs/content/EdInputImage.xul
editor/ui/dialogs/content/EdInputProps.xul
editor/ui/dialogs/content/EdInsSrc.xul
editor/ui/dialogs/content/EdInsertChars.js
editor/ui/dialogs/content/EdInsertChars.xul
editor/ui/dialogs/content/EdInsertMath.xul
editor/ui/dialogs/content/EdInsertTOC.js
editor/ui/dialogs/content/EdInsertTable.js
editor/ui/dialogs/content/EdInsertTable.xul
editor/ui/dialogs/content/EdLabelProps.xul
editor/ui/dialogs/content/EdLinkChecker.js
editor/ui/dialogs/content/EdLinkChecker.xul
editor/ui/dialogs/content/EdLinkProps.js
editor/ui/dialogs/content/EdListProps.js
editor/ui/dialogs/content/EdListProps.xul
editor/ui/dialogs/content/EdNamedAnchorProps.js
editor/ui/dialogs/content/EdNamedAnchorProps.xul
editor/ui/dialogs/content/EdPageProps.js
editor/ui/dialogs/content/EdPageProps.xul
editor/ui/dialogs/content/EdReplace.js
editor/ui/dialogs/content/EdSelectProps.xul
editor/ui/dialogs/content/EdSpellCheck.js
editor/ui/dialogs/content/EdSpellCheck.xul
editor/ui/dialogs/content/EdTableProps.js
editor/ui/dialogs/content/EdTableProps.xul
editor/ui/dialogs/content/EdTextAreaProps.js
editor/ui/dialogs/content/EdTextAreaProps.xul
editor/ui/dialogs/content/EditConflict.js
editor/ui/dialogs/content/EditConflict.xul
editor/ui/dialogs/content/EditorPublish.js
editor/ui/dialogs/content/EditorPublish.xul
editor/ui/dialogs/content/EditorPublishOverlay.xul
editor/ui/dialogs/content/EditorPublishProgress.js
editor/ui/dialogs/content/EditorPublishProgress.xul
editor/ui/dialogs/content/EditorPublishSettings.js
editor/ui/dialogs/content/EditorPublishSettings.xul
editor/ui/dialogs/content/EditorSaveAsCharset.js
editor/ui/jar.mn
editor/ui/locales/en-US/chrome/composer/editor.dtd
editor/ui/locales/en-US/chrome/composer/editor.properties
--- a/editor/ui/composer.js
+++ b/editor/ui/composer.js
@@ -73,17 +73,17 @@ pref("editor.save_associated_files",    
 pref("editor.always_show_publish_dialog",    false);
 
 /*
  * What are the entities that you want Mozilla to save using mnemonic
  * names rather than numeric codes? E.g. If set, we'll output &nbsp;
  * otherwise, we may output 0xa0 depending on the charset.
  *
  * "none"   : don't use any entity names; only use numeric codes.
- * "basic"  : use entity names just for &nbsp; &amp; &lt; &gt; &quot; for 
+ * "basic"  : use entity names just for &nbsp; &amp; &lt; &gt; &quot; for
  *            interoperability/exchange with products that don't support more
  *            than that.
  * "latin1" : use entity names for 8bit accented letters and other special
  *            symbols between 128 and 255.
  * "html"   : use entity names for 8bit accented letters, greek letters, and
  *            other special markup symbols as defined in HTML4.
  */
 //pref("editor.encode_entity",                 "html");
@@ -92,11 +92,11 @@ pref("editor.always_show_publish_dialog"
 #ifdef XP_UNIX
 pref("editor.disable_spell_checker", false);
 pref("editor.dont_lock_spell_files", true);
 #endif
 #endif
 
 pref("editor.CR_creates_new_p", false);
 
-// Pasting images from the clipboard, order of encoding preference: 
+// Pasting images from the clipboard, order of encoding preference:
 // JPEG-PNG-GIF=0, PNG-JPEG-GIF=1, GIF-JPEG-PNG=2
 pref("clipboard.paste_image_type", 1);
--- a/editor/ui/composer/content/EditorAllTags.css
+++ b/editor/ui/composer/content/EditorAllTags.css
@@ -1,802 +1,802 @@
 /* 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/. */
 
-/* Styles to alter look of things in the Editor content window 
+/* Styles to alter look of things in the Editor content window
  *  for the "All Tags Edit Mode" Every HTML tag shows up as an icon.
 */
 
 /* For "userdefined" or "unknown" tags
    (Note that "_" must be escaped)
 */
 
 *:not(a):not(abbr):not(acronym):not(address):not(applet):not(area):not(b):not(base):not(basefont):not(bdo):not(bgsound):not(big):not(blink):not(blockquote):not(body):not(br):not(button):not(canvas):not(caption):not(center):not(cite):not(code):not(col):not(colgroup):not(dd):not(del):not(dfn):not(dir):not(div):not(dl):not(dt):not(em):not(embed):not(fieldset):not(font):not(form):not(frame):not(frameset):not(h1):not(h2):not(h3):not(h4):not(h5):not(h6):not(head):not(hr):not(html):not(i):not(iframe):not(image):not(img):not(input):not(ins):not(isindex):not(kbd):not(keygen):not(label):not(legend):not(li):not(link):not(listing):not(map):not(marquee):not(menu):not(meta):not(multicol):not(nobr):not(noembed):not(noframes):not(noscript):not(object):not(ol):not(optgroup):not(option):not(p):not(param):not(plaintext):not(pre):not(q):not(s):not(samp):not(script):not(select):not(server):not(small):not(sound):not(spacer):not(span):not(strike):not(strong):not(style):not(sub):not(sup):not(table):not(tbody):not(td):not(textarea):not(tfoot):not(th):not(thead):not(title):not(tr):not(tt):not(u):not(ul):not(var):not(wbr):not(xmp) {
   display: inline;
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 16px; 
+  padding-left: 16px;
   background-image: url(chrome://editor/content/images/tag-userdefined.gif);
   background-repeat: no-repeat;
   background-position: top left;
 }
 
 a:not([\_moz_anonclass]) {
   min-height: 16px; margin-left: 2px; margin-top: 2px;
-  padding-left: 20px; 
+  padding-left: 20px;
   background-image: url(chrome://editor/content/images/tag-a.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 abbr {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 35px; 
+  padding-left: 35px;
   background-image: url(chrome://editor/content/images/tag-abr.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 
 acronym {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 57px; 
+  padding-left: 57px;
   background-image: url(chrome://editor/content/images/tag-acr.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 address {
   min-height: 44px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-adr.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 applet {
   min-height: 35px; margin-top: 2px;
-  padding-left: 47px; 
+  padding-left: 47px;
   background-image: url(chrome://editor/content/images/tag-app.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 area {
   min-height: 35px; margin-top: 2px;
-  padding-left: 39px; 
+  padding-left: 39px;
   background-image: url(chrome://editor/content/images/tag-ara.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 b {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 20px; 
+  padding-left: 20px;
   background-image: url(chrome://editor/content/images/tag-b.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 basefont {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 57px; 
+  padding-left: 57px;
   background-image: url(chrome://editor/content/images/tag-bsf.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 bdo {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-bdo.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 big {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-big.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 blockquote {
   min-height: 44px; margin-left: 2px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-blq.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 body {
   min-height: 36px; margin-left: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-body.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 br {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 23px; 
+  padding-left: 23px;
   background-image: url(chrome://editor/content/images/tag-br.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 button {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 57px; 
+  padding-left: 57px;
   background-image: url(chrome://editor/content/images/tag-btn.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 caption {
   min-height: 35px; margin-top: 2px;
-  padding-left: 55px; 
+  padding-left: 55px;
   background-image: url(chrome://editor/content/images/tag-cpt.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 center {
   min-height: 44px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-ctr.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 cite {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 39px; 
+  padding-left: 39px;
   background-image: url(chrome://editor/content/images/tag-cit.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 code {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 39px; 
+  padding-left: 39px;
   background-image: url(chrome://editor/content/images/tag-cod.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 col {
   min-height: 35px; margin-left: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-col.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 colgroup {
   min-height: 35px; margin-left: 2px;
-  padding-left: 51px; 
+  padding-left: 51px;
   background-image: url(chrome://editor/content/images/tag-clg.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 dd {
   min-height: 35px; margin-top: 2px;
-  padding-left: 23px; 
+  padding-left: 23px;
   background-image: url(chrome://editor/content/images/tag-dd.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 del {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-del.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 dfn {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-dfn.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 dir {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-dir.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 div {
   min-height: 24px; margin-top: 2px;
   /* TEMPORARY TO COMPENSATE FOR BUG */
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-div.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 input div {
   min-height: 0px; margin-left: 0px; margin-top: 0px;
-  padding-left: 0px; 
+  padding-left: 0px;
   background-image: none;
 }
 
 dl {
   min-height: 20px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-dl.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 dt {
   min-height: 35px; margin-top: 2px;
-  padding-left: 23px; 
+  padding-left: 23px;
   background-image: url(chrome://editor/content/images/tag-dt.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 em {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 23px; 
+  padding-left: 23px;
   background-image: url(chrome://editor/content/images/tag-em.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 fieldset {
   min-height: 44px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-fld.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 font {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 39px; 
+  padding-left: 39px;
   background-image: url(chrome://editor/content/images/tag-fnt.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 form {
   min-height: 36px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-for.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 frame {
   min-height: 40px; margin-left: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-frm.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 frameset {
   min-height: 44px; margin-left: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-fst.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 h1 {
   min-height: 20px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-h1.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 h2 {
   min-height: 20px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-h2.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 h3 {
   min-height: 20px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-h3.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 h4 {
   min-height: 20px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-h4.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 h5 {
   min-height: 20px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-h5.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 h6 {
   min-height: 20px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-h6.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 hr {
   min-height: 20px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-hr.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 i {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 20px; 
+  padding-left: 20px;
   background-image: url(chrome://editor/content/images/tag-i.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 iframe {
   min-height: 35px; margin-left: 2px;
-  padding-left: 47px; 
+  padding-left: 47px;
   background-image: url(chrome://editor/content/images/tag-ifr.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 img:not([\_moz_anonclass]) {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-img.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 input {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 39px; 
+  padding-left: 39px;
   background-image: url(chrome://editor/content/images/tag-inp.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 ins {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-ins.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 isindex {
   min-height: 40px; margin-left: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-isx.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 kbd {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-kbd.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 label {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 39px; 
+  padding-left: 39px;
   background-image: url(chrome://editor/content/images/tag-lbl.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 legend {
   min-height: 35px; margin-top: 2px;
-  padding-left: 49px; 
+  padding-left: 49px;
   background-image: url(chrome://editor/content/images/tag-lgn.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 li {
   min-height: 35px; margin-top: 2px;
-  padding-left: 23px; 
+  padding-left: 23px;
   background-image: url(chrome://editor/content/images/tag-li.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 listing {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 57px; 
+  padding-left: 57px;
   background-image: url(chrome://editor/content/images/tag-lst.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 map {
   min-height: 35px; margin-left: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-map.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 menu {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 39px; 
+  padding-left: 39px;
   background-image: url(chrome://editor/content/images/tag-men.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 nobr {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 39px; 
+  padding-left: 39px;
   background-image: url(chrome://editor/content/images/tag-nbr.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 noframes {
   min-height: 44px; margin-left: 2px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-nfr.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 noscript {
   min-height: 44px; margin-left: 2px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-nsc.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 object {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 49px; 
+  padding-left: 49px;
   background-image: url(chrome://editor/content/images/tag-obj.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 ol {
   min-height: 38px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-ol.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 optgroup {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 51px; 
+  padding-left: 51px;
   background-image: url(chrome://editor/content/images/tag-opg.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 option {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 47px; 
+  padding-left: 47px;
   background-image: url(chrome://editor/content/images/tag-opt.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 p {
   min-height: 38px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-p.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 param {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 43px; 
+  padding-left: 43px;
   background-image: url(chrome://editor/content/images/tag-prm.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 plaintext {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 57px; 
+  padding-left: 57px;
   background-image: url(chrome://editor/content/images/tag-pln.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 pre {
   min-height: 24px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-pre.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 q {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 20px; 
+  padding-left: 20px;
   background-image: url(chrome://editor/content/images/tag-q.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 s {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 20px; 
+  padding-left: 20px;
   background-image: url(chrome://editor/content/images/tag-s.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 samp {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 39px; 
+  padding-left: 39px;
   background-image: url(chrome://editor/content/images/tag-smp.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 script {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 45px; 
+  padding-left: 45px;
   background-image: url(chrome://editor/content/images/tag-scr.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 select {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 47px; 
+  padding-left: 47px;
   background-image: url(chrome://editor/content/images/tag-slc.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 small {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 41px; 
+  padding-left: 41px;
   background-image: url(chrome://editor/content/images/tag-sml.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 span:not([\_moz_anonclass]) {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
   /* TEMPORARY TO COMPENSATE FOR BUG */
-  padding-left: 39px; 
+  padding-left: 39px;
   background-image: url(chrome://editor/content/images/tag-spn.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 strike {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 45px; 
+  padding-left: 45px;
   background-image: url(chrome://editor/content/images/tag-stk.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 strong {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 51px; 
+  padding-left: 51px;
   background-image: url(chrome://editor/content/images/tag-stn.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 sub {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-sub.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 sup {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-sup.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
-/* The background image technique is not working for 
+/* The background image technique is not working for
    some table elements. Trying the "before" strategy
 */
 
 table {
   min-height: 40px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-tbl.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 tbody {
   min-height: 42px; margin-left: 2px; margin-top: 1px;
-  padding-left: 17px; 
+  padding-left: 17px;
   content: url(chrome://editor/content/images/tag-tbd.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 td {
   min-height: 22px; margin-left: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-td.gif);
 
   background-repeat: no-repeat;
   background-position: top left;
 }
 
 textarea {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 59px; 
+  padding-left: 59px;
   background-image: url(chrome://editor/content/images/tag-txt.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 tfoot {
   min-height: 42px; margin-left: 2px; margin-top: 1px;
-  padding-left: 17px; 
+  padding-left: 17px;
   content: url(chrome://editor/content/images/tag-tft.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 th {
   min-height: 22px; margin-left: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-th.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 thead {
   min-height: 42px; margin-left: 2px; margin-top: 1px;
-  padding-left: 17px; 
+  padding-left: 17px;
   content: url(chrome://editor/content/images/tag-thd.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 tr {
   min-height: 22px; margin-left: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-tr.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 tt {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 23px; 
+  padding-left: 23px;
   background-image: url(chrome://editor/content/images/tag-tt.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 u {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 23px; 
+  padding-left: 23px;
   background-image: url(chrome://editor/content/images/tag-u.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 ul {
   min-height: 20px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-ul.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 var {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-var.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 xmp {
   min-height: 35px; margin-left: 2px; margin-top: 2px;
-  padding-left: 31px; 
+  padding-left: 31px;
   background-image: url(chrome://editor/content/images/tag-xmp.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 
 /* These are tags that we DON'T want to show icons for.
    We have images for them in case we want to utilize them
    for some other purpose than the "All Tags" editor mode
 
 html {
   min-height: 36px; margin-left: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-html.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 head {
   min-height: 36px; margin-left: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-hed.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 These are tags that are ONLY allowed as children of HEAD:
 
 title {
   min-height: 40px; margin-left: 2px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-ttl.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 base {
   min-height: 36px; margin-left: 2px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-bas.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 style {
   min-height: 40px; margin-left: 2px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-stl.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 meta {
   min-height: 36px; margin-left: 2px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-met.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
 link {
   min-height: 30px; margin-left: 2px; margin-top: 2px;
-  padding-left: 17px; 
+  padding-left: 17px;
   background-image: url(chrome://editor/content/images/tag-lnk.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 */
--- a/editor/ui/composer/content/EditorContent.css
+++ b/editor/ui/composer/content/EditorContent.css
@@ -1,30 +1,30 @@
 /* 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/. */
 
-/* Styles to alter look of things in the Editor content window 
+/* Styles to alter look of things in the Editor content window
  *  for the "Normal Edit Mode" These settings will be removed
  *  when we display in completely WYSIWYG "Edit Preview" mode
- *  Anything that should never change, like cursors, should be 
+ *  Anything that should never change, like cursors, should be
  *  place in EditorOverride.css, instead of here.
 */
 
 @import url(chrome://communicator/skin/smileys.css);
 
 a[name] {
   min-height: 17px; margin-left: 2px; margin-top: 2px;
-  padding-left: 20px; 
+  padding-left: 20px;
   background-image: url(chrome://editor/content/images/tag-anchor.gif);
-  background-repeat: no-repeat; 
+  background-repeat: no-repeat;
   background-position: top left;
 }
 
-/* Force border display for empty cells 
+/* Force border display for empty cells
    and tables with 0 border
 */
 table {
   empty-cells: show;
 }
 
 /* give a red dotted border to tables and cells with no border
    otherwise they are invisible
--- a/editor/ui/composer/content/EditorContextMenu.js
+++ b/editor/ui/composer/content/EditorContextMenu.js
@@ -57,17 +57,17 @@ nsContextMenu.prototype.initEditorItems 
     goUpdateTableMenuItems(document.getElementById("composerTableMenuItems"));
 
     this.hideDisabledItem("context-undo", true);
     this.hideDisabledItem("context-redo", true);
     this.hideDisabledItem("context-cut", true);
     this.hideDisabledItem("context-copy", true);
     this.hideDisabledItem("context-paste", true);
     this.hideDisabledItem("context-delete", true);
-    
+
     this.showItem("context-sep-undo",
                   this.shouldShowSeparator("context-sep-undo"));
     this.showItem("context-sep-paste",
                   this.shouldShowSeparator("context-sep-paste"));
   }
 
   this.hideDisabledItem("objectProperties_cm", aShow);
 
--- a/editor/ui/composer/content/composerOverlay.xul
+++ b/editor/ui/composer/content/composerOverlay.xul
@@ -1,9 +1,9 @@
-<?xml version="1.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/. -->
 
 <!DOCTYPE overlay [
 <!ENTITY % editorDTD SYSTEM "chrome://editor/locale/editor.dtd">
 %editorDTD;
 ]>
--- a/editor/ui/composer/content/editor.js
+++ b/editor/ui/composer/content/editor.js
@@ -92,17 +92,17 @@ function ShowHideToolbarButtons()
     let button = document.getElementById(id + "Button") ||
                  document.getElementById(id + "-button");
     if (button)
       button.hidden = !Services.prefs.getBoolPref(prefName);
   }
   ShowHideToolbarSeparators(document.getElementById("EditToolbar"));
   ShowHideToolbarSeparators(document.getElementById("FormatToolbar"));
 }
-  
+
 function nsPrefListener(prefName)
 {
   this.startup(prefName);
 }
 
 // implements nsIObserver
 nsPrefListener.prototype =
 {
@@ -126,30 +126,30 @@ nsPrefListener.prototype =
   },
   observe: function(subject, topic, prefName)
   {
     if (!IsHTMLEditor())
       return;
     // verify that we're changing a button pref
     if (topic != "nsPref:changed")
       return;
-    
+
     let editor = GetCurrentEditor();
     if (prefName == kUseCssPref)
     {
       let cmd = document.getElementById("cmd_highlight");
       if (cmd) {
         let useCSS = Services.prefs.getBoolPref(prefName);
 
         if (useCSS && editor) {
           let mixedObj = {};
           let state = editor.getHighlightColorState(mixedObj);
           cmd.setAttribute("state", state);
           cmd.collapsed = false;
-        }      
+        }
         else {
           cmd.setAttribute("state", "transparent");
           cmd.collapsed = true;
         }
 
         if (editor)
           editor.isCSSEnabled = useCSS;
       }
@@ -211,17 +211,17 @@ var DocumentReloadListener =
       editor.documentCharacterSet = charset;
 
     } catch (e) {}
   }
 };
 
 // implements nsIObserver
 var gEditorDocumentObserver =
-{ 
+{
   observe: function(aSubject, aTopic, aData)
   {
     // Should we allow this even if NOT the focused editor?
     var commandManager = GetCurrentCommandManager();
     if (commandManager != aSubject)
       return;
 
     var editor = GetCurrentEditor();
@@ -252,27 +252,27 @@ var gEditorDocumentObserver =
               errorStringId = "CantEditFramesetMsg";
               break;
             case nsIEditingSession.eEditorErrorCantEditMimeType:
               errorStringId = "CantEditMimeTypeMsg";
               break;
             case nsIEditingSession.eEditorErrorUnknown:
               errorStringId = "CantEditDocumentMsg";
               break;
-            // Note that for "eEditorErrorFileNotFound, 
+            // Note that for "eEditorErrorFileNotFound,
             // network code popped up an alert dialog, so we don't need to
           }
           if (errorStringId)
             Services.prompt.alert(window, "", GetString(errorStringId));
         } catch(e) { dump("EXCEPTION GETTING obs_documentCreated state "+e+"\n"); }
 
         // We have a bad editor -- nsIEditingSession will rebuild an editor
         //   with a blank page, so simply abort here
         if (editorStatus)
-          return; 
+          return;
 
         if (!("InsertCharWindow" in window))
           window.InsertCharWindow = null;
 
         try {
           editor.QueryInterface(nsIEditorStyleSheets);
 
           //  and extra styles for showing anchors, table borders, smileys, etc
@@ -326,17 +326,17 @@ var gEditorDocumentObserver =
             HideItem("tableButton");
 
             HideItem("fileExportToText");
             HideItem("previewInBrowser");
 
 /* XXX When paste actually converts formatted rich text to pretty formatted plain text
        and pasteNoFormatting is fixed to paste the text without formatting (what paste
        currently does), then this item shouldn't be hidden: */
-            HideItem("menu_pasteNoFormatting"); 
+            HideItem("menu_pasteNoFormatting");
 
             HideItem("cmd_viewFormatToolbar");
             HideItem("cmd_viewEditModeToolbar");
 
             HideItem("viewSep1");
             HideItem("viewNormalMode");
             HideItem("viewAllTagsMode");
             HideItem("viewSourceMode");
@@ -344,17 +344,17 @@ var gEditorDocumentObserver =
 
             HideItem("structSpacer");
 
             // Hide everything in "Insert" except for "Symbols"
             let menuPopupChildren = document.querySelectorAll('[id="insertMenuPopup"] > :not(#insertChars)');
             for (let i = 0; i < menuPopupChildren.length; i++)
               menuPopupChildren.item(i).hidden = true;
           }
-    
+
           // Set window title
           UpdateWindowTitle();
 
           // We must wait until document is created to get proper Url
           // (Windows may load with local file paths)
           SetSaveAndPublishUI(GetDocumentUrl());
 
           // Start in "Normal" edit mode
@@ -425,17 +425,17 @@ function EditorSharedStartup()
   GetCurrentEditorElement().docShell.allowDNSPrefetch = false;
 
   // Set up the mime type and register the commands.
   if (IsHTMLEditor())
     SetupHTMLEditorCommands();
   else
     SetupTextEditorCommands();
 
-  // add observer to be called when document is really done loading 
+  // add observer to be called when document is really done loading
   // and is modified
   // Note: We're really screwed if we fail to install this observer!
   try {
     var commandManager = GetCurrentCommandManager();
     commandManager.addCommandObserver(gEditorDocumentObserver, "obs_documentCreated");
     commandManager.addCommandObserver(gEditorDocumentObserver, "cmd_setDocumentModified");
     commandManager.addCommandObserver(gEditorDocumentObserver, "obs_documentWillBeDestroyed");
     commandManager.addCommandObserver(gEditorDocumentObserver, "obs_documentLocationChanged");
@@ -516,17 +516,17 @@ async function CheckAndSaveDocument(comm
       return true;
   } catch (e) { return true; }
 
   if (!IsDocumentModified() && !IsHTMLSourceChanged())
     return true;
 
   // call window.focus, since we need to pop up a dialog
   // and therefore need to be visible (to prevent user confusion)
-  top.document.commandDispatcher.focusedWindow.focus();  
+  top.document.commandDispatcher.focusedWindow.focus();
 
   var scheme = GetScheme(GetDocumentUrl());
   var doPublish = (scheme && scheme != "file");
 
   var strID;
   switch (command)
   {
     case "cmd_close":
@@ -537,17 +537,17 @@ async function CheckAndSaveDocument(comm
       break;
     case "cmd_editSendPage":
       strID = "SendPageReason";
       break;
     case "cmd_validate":
       strID = "BeforeValidate";
       break;
   }
-    
+
   var reasonToSave = strID ? GetString(strID) : "";
 
   var title = document.title || GetString("untitledDefaultFilename");
 
   var dialogTitle = GetString(doPublish ? "PublishPage" : "SaveDocument");
   var dialogMsg = GetString(doPublish ? "PublishPrompt" : "SaveFilePrompt");
   dialogMsg = (dialogMsg.replace(/%title%/,title)).replace(/%reason%/,reasonToSave);
 
@@ -555,29 +555,29 @@ async function CheckAndSaveDocument(comm
   let promptFlags = Services.prompt.BUTTON_TITLE_CANCEL * Services.prompt.BUTTON_POS_1;
   let button1Title = null;
   let button3Title = null;
 
   if (doPublish)
   {
     promptFlags += Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_0;
     button1Title = GetString("Publish");
-    button3Title = GetString("DontPublish");    
+    button3Title = GetString("DontPublish");
   }
   else
   {
     promptFlags += Services.prompt.BUTTON_TITLE_SAVE * Services.prompt.BUTTON_POS_0;
   }
 
   // If allowing "Don't..." button, add that
   if (allowDontSave)
     promptFlags += doPublish ?
         (Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_2)
         : (Services.prompt.BUTTON_TITLE_DONT_SAVE * Services.prompt.BUTTON_POS_2);
-  
+
   result = Services.prompt.confirmEx(window, dialogTitle, dialogMsg, promptFlags,
                           button1Title, null, button3Title, null, {value:0});
 
   if (result == 0)
   {
     // Save, but first finish HTML source mode
     SetEditMode(gPreviousNonSourceDisplayMode);
     if (doPublish)
@@ -607,17 +607,17 @@ function EditorSetCharacterSet(aEvent)
 {
   try {
     var editor = GetCurrentEditor();
     if (aEvent.target.hasAttribute("charset"))
       editor.documentCharacterSet = aEvent.target.getAttribute("charset");
     var docUrl = GetDocumentUrl();
     if( !IsUrlAboutBlank(docUrl))
     {
-      // reloading the document will reverse any changes to the META charset, 
+      // reloading the document will reverse any changes to the META charset,
       // we need to put them back in, which is achieved by a dedicated listener
       editor.addDocumentStateListener( DocumentReloadListener );
       EditorLoadUrl(docUrl);
     }
   } catch (e) {}
 }
 
 // --------------------------- Text style ---------------------------
@@ -1026,17 +1026,17 @@ function initFontFaceMenu(menuPopup)
 // ==separator
 const kFixedFontFaceMenuItems = 8;
 
 function initLocalFontFaceMenu(menuPopup)
 {
   if (!gLocalFonts)
   {
     // Build list of all local fonts once per editor
-    try 
+    try
     {
       var enumerator = Cc["@mozilla.org/gfx/fontenumerator;1"]
                          .getService(Ci.nsIFontEnumerator);
       var localFontCount = { value: 0 }
       gLocalFonts = enumerator.EnumerateAllFonts(localFontCount);
     }
     catch(e) { }
   }
@@ -1605,17 +1605,17 @@ function EditorDblClick(event)
 
     // Don't fire for body/p and other block elements.
     // It's common that people try to double-click
     // to select a word, but the click hits an empty area.
     if (element &&
         !["body","p","h1","h2","h3","h4","h5","h6","blockquote","div","pre"]
          .includes(element.nodeName.toLowerCase()))
     {
-      goDoCommand("cmd_objectProperties");  
+      goDoCommand("cmd_objectProperties");
       event.preventDefault();
     }
   }
 }
 
 function EditorClick(event)
 {
   // For Web Composer: In Show All Tags Mode,
@@ -1626,17 +1626,17 @@ function EditorClick(event)
     try
     {
       // We check event.explicitOriginalTarget here because .target will never
       // be a textnode (bug 193689)
       var element = event.explicitOriginalTarget.QueryInterface(
                         Ci.nsIDOMElement);
       var name = element.localName;
       if (!["body", "caption", "table", "td", "th", "tr"].includes(name))
-      {          
+      {
         GetCurrentEditor().selectElement(event.explicitOriginalTarget);
         event.preventDefault();
       }
     } catch (e) {}
   }
 }
 
 /*TODO: We need an oncreate hook to do enabling/disabling for the
@@ -1753,17 +1753,17 @@ function SetEditMode(mode)
           doctypeNode.collapsed = true;
       }
     }
     // Get the entire document's source string
 
     var flags = (editor.documentCharacterSet == "ISO-8859-1")
       ? kOutputEncodeLatin1Entities
       : kOutputEncodeBasicEntities;
-    try { 
+    try {
       let encodeEntity = Services.prefs.getCharPref("editor.encode_entity");
       switch (encodeEntity) {
         case "basic"  : flags = kOutputEncodeBasicEntities; break;
         case "latin1" : flags = kOutputEncodeLatin1Entities; break;
         case "html"   : flags = kOutputEncodeHTMLEntities; break;
         case "none"   : flags = 0;     break;
       }
     } catch (e) { }
@@ -1788,17 +1788,17 @@ function SetEditMode(mode)
     // Only rebuild document if a change was made in source window
     if (IsHTMLSourceChanged())
     {
       // Disable spell checking when rebuilding source
       InlineSpellCheckerUI.enabled = false;
       inlineSpellCheckItem.removeAttribute('checked');
 
       // Reduce the undo count so we don't use too much memory
-      //   during multiple uses of source window 
+      //   during multiple uses of source window
       //   (reinserting entire doc caches all nodes)
       try {
         editor.transactionManager.maxTransactionCount = 1;
       } catch (e) {}
 
       editor.beginTransaction();
       try {
         // We are coming from edit source mode,
@@ -1900,17 +1900,17 @@ function SetDisplayMode(mode)
     try {
       var editor = GetCurrentEditor();
       editor.QueryInterface(nsIEditorStyleSheets);
       editor instanceof Ci.nsIHTMLObjectResizer;
 
       switch (mode)
       {
         case kDisplayModePreview:
-          // Disable all extra "edit mode" style sheets 
+          // Disable all extra "edit mode" style sheets
           editor.enableStyleSheet(kNormalStyleSheet, false);
           editor.enableStyleSheet(kAllTagsStyleSheet, false);
           editor.objectResizingEnabled = true;
           break;
 
         case kDisplayModeNormal:
           editor.addOverrideStyleSheet(kNormalStyleSheet);
           // Disable ShowAllTags mode
@@ -1947,17 +1947,17 @@ function SetDisplayMode(mode)
   // Set the selected tab at bottom of window:
   // (Note: Setting "selectedIndex = mode" won't redraw tabs when menu is used.)
   document.getElementById("EditModeTabs").selectedItem = document.getElementById(kDisplayModeTabIDS[mode]);
 
   // Uncheck previous menuitem and set new check since toolbar may have been used
   if (previousMode >= 0)
     document.getElementById(kDisplayModeMenuIDs[previousMode]).setAttribute("checked","false");
   document.getElementById(kDisplayModeMenuIDs[mode]).setAttribute("checked","true");
-  
+
 
   return true;
 }
 
 function UpdateWindowTitle()
 {
   try {
     var filename = "";
@@ -1978,17 +1978,17 @@ function UpdateWindowTitle()
       SaveRecentFilesPrefs(title, fileType);
     }
 
     // Set window title with " - Composer" or " - Text Editor" appended.
     var xulWin = document.documentElement;
 
     document.title = (title || filename || gUntitledString) +
                      windowTitle +
-                     xulWin.getAttribute("titlemenuseparator") + 
+                     xulWin.getAttribute("titlemenuseparator") +
                      xulWin.getAttribute("titlemodifier");
   } catch (e) { dump(e); }
 }
 
 function SaveRecentFilesPrefs(aTitle, aFileType)
 {
   var curUrl = StripPassword(GetDocumentUrl());
   var historyCount = Services.prefs.getIntPref("editor.history.url_maximum");
@@ -2003,17 +2003,17 @@ function SaveRecentFilesPrefs(aTitle, aF
     urlArray.push(curUrl);
     typeArray.push(aFileType);
   }
 
   for (let i = 0; i < historyCount && urlArray.length < historyCount; i++)
   {
     let url = GetStringPref("editor.history_url_" + i);
 
-    // Continue if URL pref is missing because 
+    // Continue if URL pref is missing because
     //  a URL not found during loading may have been removed
 
     // Skip over current an "data" URLs
     if (url && url != curUrl && GetScheme(url) != "data")
     {
       let title = GetStringPref("editor.history_title_" + i);
       let fileType = GetStringPref("editor.history_type_" + i);
       titleArray.push(title);
@@ -2069,17 +2069,17 @@ function InitObjectPropertiesMenuitem()
         {
           if (GetCurrentEditor().getElementOrParentByTagName("href", element))
           {
             objStr = GetString("ImageAndLink");
             // Return "href" so it is detected as a link.
             name = "href";
           }
         } catch(e) {}
-        
+
         if (objStr == "")
           objStr = GetString("Image");
         break;
       case "hr":
         objStr = GetString("HLine");
         break;
       case "table":
         objStr = GetString("Table");
@@ -2268,34 +2268,34 @@ function InitAlignMenu()
     menuItem.setAttribute("checked", "true");
 }
 
 function EditorSetDefaultPrefsAndDoctype()
 {
   var editor = GetCurrentEditor();
 
   var domdoc;
-  try { 
+  try {
     domdoc = editor.document;
   } catch (e) { dump( e + "\n"); }
   if ( !domdoc )
   {
     dump("EditorSetDefaultPrefsAndDoctype: EDITOR DOCUMENT NOT FOUND\n");
     return;
   }
 
-  // Insert a doctype element 
+  // Insert a doctype element
   // if it is missing from existing doc
   if (!domdoc.doctype)
   {
     var newdoctype = domdoc.implementation.createDocumentType("HTML", "-//W3C//DTD HTML 4.01 Transitional//EN","");
     if (newdoctype)
       domdoc.insertBefore(newdoctype, domdoc.firstChild);
   }
-  
+
   // search for head; we'll need this for meta tag additions
   let headelement = domdoc.querySelector("head");
   if (!headelement)
   {
     headelement = domdoc.createElement("head");
     if (headelement)
       domdoc.insertAfter(headelement, domdoc.firstChild);
   }
@@ -2577,17 +2577,17 @@ function InitJoinCellMenuitem(id)
   //       included in the selection?
   var menuText;
   var menuItem = document.getElementById(id);
   if (!menuItem) return;
 
   // Use "Join selected cells if there's more than 1 cell selected
   var numSelected;
   var foundElement;
-  
+
   try {
     var tagNameObj = {};
     var countObj = {value:0}
     foundElement = GetCurrentTableEditor().getSelectedOrParentTableElement(tagNameObj, countObj);
     numSelected = countObj.value
   }
   catch(e) {}
   if (foundElement && numSelected > 1)
@@ -2621,17 +2621,17 @@ function InitRemoveStylesMenuitems(remov
     linkItem.setAttribute("accesskey", GetString("RemoveLinksAccesskey"));
     // Note: disabling text style is a pain since there are so many - forget it!
 
     // Disable if not in a link, but always allow "Remove"
     //  if selection isn't collapsed since we only look at anchor node
     try {
       SetElementEnabled(linkItem, !isCollapsed ||
                       editor.getElementOrParentByTagName("href", null));
-    } catch(e) {}      
+    } catch(e) {}
   }
   // Disable if selection is collapsed
   SetElementEnabledById(removeNamedAnchorsId, !isCollapsed);
 }
 
 function goUpdateTableMenuItems(commandset)
 {
   var editor = GetCurrentTableEditor();
@@ -2711,17 +2711,17 @@ function IsInTable()
 }
 
 function IsInTableCell()
 {
   try {
     var editor = GetCurrentEditor();
     var flags = editor.flags;
     return (IsHTMLEditor() &&
-            !(flags & nsIPlaintextEditor.eEditorReadonlyMask) && 
+            !(flags & nsIPlaintextEditor.eEditorReadonlyMask) &&
             IsEditingRenderedHTML() &&
             null != editor.getElementOrParentByTagName("td", null));
   } catch (e) {}
   return false;
 
 }
 
 function IsSelectionInOneCell()
@@ -2752,17 +2752,17 @@ function IsSelectionInOneCell()
 //   else use false to do nothing if not in a table
 function EditorInsertOrEditTable(insertAllowed)
 {
   if (IsInTable())
   {
     // Edit properties of existing table
     window.openDialog("chrome://editor/content/EdTableProps.xul", "_blank", "chrome,close,titlebar,modal", "","TablePanel");
     gContentWindow.focus();
-  } 
+  }
   else if (insertAllowed)
   {
     try {
       if (GetCurrentEditor().selection.isCollapsed)
         // If we have a caret, insert a blank table...
         EditorInsertTable();
       else
         // else convert the selection into a table
--- a/editor/ui/composer/content/editorApplicationOverlay.js
+++ b/editor/ui/composer/content/editorApplicationOverlay.js
@@ -5,45 +5,45 @@
 
 /* Implementations of nsIControllerCommand for composer commands */
 
 function initEditorContextMenuItems(aEvent)
 {
   var shouldShowEditPage = !gContextMenu.onImage && !gContextMenu.onLink && !gContextMenu.onTextInput && !gContextMenu.inDirList;
   gContextMenu.showItem( "context-editpage", shouldShowEditPage );
 
-  var shouldShowEditLink = gContextMenu.onSaveableLink; 
+  var shouldShowEditLink = gContextMenu.onSaveableLink;
   gContextMenu.showItem( "context-editlink", shouldShowEditLink );
 
-  // Hide the applications separator if there's no add-on apps present. 
+  // Hide the applications separator if there's no add-on apps present.
   gContextMenu.showItem("context-sep-apps", gContextMenu.shouldShowSeparator("context-sep-apps"));
 }
-  
+
 function initEditorContextMenuListener(aEvent)
 {
   var popup = document.getElementById("contentAreaContextMenu");
   if (popup)
     popup.addEventListener("popupshowing", initEditorContextMenuItems);
 }
 
 addEventListener("load", initEditorContextMenuListener, false);
 
-function editDocument(aDocument)      
+function editDocument(aDocument)
 {
   if (!aDocument)
     aDocument = window.content.document;
 
-  editPage(aDocument.URL); 
+  editPage(aDocument.URL);
 }
 
 function editPageOrFrame()
 {
   var focusedWindow = document.commandDispatcher.focusedWindow;
 
-  // if the uri is a specific frame, grab it, else use the frameset uri 
+  // if the uri is a specific frame, grab it, else use the frameset uri
   // and let Composer handle error if necessary
   editPage(getContentFrameURI(focusedWindow));
 }
 
 function getContentFrameURI(aFocusedWindow)
 {
   let isContentFrame = aFocusedWindow ?
                          (aFocusedWindow.top == window.content) : false;
@@ -60,17 +60,17 @@ function getContentFrameURI(aFocusedWind
 function editPage(url, aFileType)
 {
   // aFileType is optional and needs to default to html.
   aFileType = aFileType || "html";
 
   // Always strip off "view-source:" and #anchors
   url = url.replace(/^view-source:/, "").replace(/#.*/, "");
 
-  // if the current window is a browser window, then extract the current charset menu setting from the current 
+  // if the current window is a browser window, then extract the current charset menu setting from the current
   // document and use it to initialize the new composer window...
 
   var wintype = document.documentElement.getAttribute('windowtype');
   var charsetArg;
 
   if (wintype == "navigator:browser" && content.document)
     charsetArg = "charset=" + content.document.characterSet;
 
@@ -126,17 +126,17 @@ function createURI(urlstring)
   return null;
 }
 
 function CheckOpenWindowForURIMatch(uri, win)
 {
   try {
     return createURI(win.content.document.URL).equals(uri);
   } catch (e) {}
-  
+
   return false;
 }
 
 function toEditor()
 {
   if (!CycleWindow("composer:html"))
     NewEditorWindow();
 }
--- a/editor/ui/composer/content/editorMailOverlay.xul
+++ b/editor/ui/composer/content/editorMailOverlay.xul
@@ -9,17 +9,17 @@
 
 <overlay id="editorMailOverlay"
          xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <!-- navigator specific commands -->
   <commandset id="tasksCommands">
     <!-- XXX insert commands here -->
   </commandset>
-         
+
   <!-- navigator specific UI items -->
   <menupopup id="menu_NewPopup">
     <!-- XXX insert File->New Menu add-ins here -->
   </menupopup>
 
   <menupopup id="menu_FilePopup">
     <!-- XXX insert File Menu add-ins here -->
   </menupopup>
--- a/editor/ui/composer/content/editorNavigatorOverlay.xul
+++ b/editor/ui/composer/content/editorNavigatorOverlay.xul
@@ -9,19 +9,19 @@
 
 <overlay id="editorNavigatorOverlay"
          xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <!-- navigator specific commands -->
   <commandset id="tasksCommands">
     <!-- XXX insert commands here -->
   </commandset>
-         
+
   <!-- navigator specific UI items -->
   <menupopup id="menu_NewPopup">
     <!-- XXX insert File->New Menu add-ins here -->
   </menupopup>
 
   <menupopup id="menu_FilePopup">
     <!-- XXX insert File Menu add-ins here -->
-  </menupopup> 
+  </menupopup>
 </overlay>
 
--- a/editor/ui/composer/content/editorPrefsOverlay.xul
+++ b/editor/ui/composer/content/editorPrefsOverlay.xul
@@ -47,9 +47,9 @@
                   label="&toolbars.label;"
                   prefpane="toolbars_pane"
                   url="chrome://editor/content/pref-toolbars.xul"
                   helpTopic="composer_prefs_toolbars"/>
       </treechildren>
     </treeitem>
   </treechildren>
 
-</overlay>         
+</overlay>
--- a/editor/ui/composer/content/editorSmileyOverlay.xul
+++ b/editor/ui/composer/content/editorSmileyOverlay.xul
@@ -1,108 +1,108 @@
-<?xml version="1.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/. -->
 
 <!DOCTYPE overlay SYSTEM "chrome://editor/locale/editorSmileyOverlay.dtd">
 
 <overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <!-- smiley menu -->
   <toolbarbutton id="smileButtonMenu"
                  class="formatting-button"
                  tooltiptext="&SmileButton.tooltip;"
                  type="menu"
                  observes="cmd_smiley">
     <menupopup id="smilyPopup">
-      <menuitem class="smiley insert-smile menuitem-iconic"       label="&smiley1Cmd.label;" 
-                oncommand="doStatefulCommand('cmd_smiley', ':-)'  )"  
+      <menuitem class="smiley insert-smile menuitem-iconic"       label="&smiley1Cmd.label;"
+                oncommand="doStatefulCommand('cmd_smiley', ':-)'  )"
                 tooltiptext="&smiley1Cmd.tooltip;"  />
       <menuitem class="smiley insert-frown menuitem-iconic"       label="&smiley2Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', ':-('  )" 
-                tooltiptext="&smiley2Cmd.tooltip;"  />                                              
+                oncommand="doStatefulCommand('cmd_smiley', ':-('  )"
+                tooltiptext="&smiley2Cmd.tooltip;"  />
       <menuitem class="smiley insert-wink menuitem-iconic"        label="&smiley3Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', ';-)'  )"  
-                tooltiptext="&smiley3Cmd.tooltip;"  />                       
+                oncommand="doStatefulCommand('cmd_smiley', ';-)'  )"
+                tooltiptext="&smiley3Cmd.tooltip;"  />
       <menuitem class="smiley insert-tongue menuitem-iconic"      label="&smiley4Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', ':-P'  )" 
+                oncommand="doStatefulCommand('cmd_smiley', ':-P'  )"
                 tooltiptext="&smiley4Cmd.tooltip;"  />
       <menuitem class="smiley insert-laughing menuitem-iconic"    label="&smiley5Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', ':-D'  )" 
+                oncommand="doStatefulCommand('cmd_smiley', ':-D'  )"
                 tooltiptext="&smiley5Cmd.tooltip;"  />
       <menuitem class="smiley insert-embarrassed menuitem-iconic" label="&smiley6Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', ':-['  )" 
+                oncommand="doStatefulCommand('cmd_smiley', ':-['  )"
                 tooltiptext="&smiley6Cmd.tooltip;"  />
       <menuitem class="smiley insert-undecided menuitem-iconic"   label="&smiley7Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', ':-\\' )" 
+                oncommand="doStatefulCommand('cmd_smiley', ':-\\' )"
                 tooltiptext="&smiley7Cmd.tooltip;"  />
       <menuitem class="smiley insert-surprise menuitem-iconic"   label="&smiley8Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', '=-O' )" 
-                tooltiptext="&smiley8Cmd.tooltip;"  />           
+                oncommand="doStatefulCommand('cmd_smiley', '=-O' )"
+                tooltiptext="&smiley8Cmd.tooltip;"  />
       <menuitem class="smiley insert-kiss menuitem-iconic"   label="&smiley9Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', ':-*' )" 
-                tooltiptext="&smiley9Cmd.tooltip;"  />           
+                oncommand="doStatefulCommand('cmd_smiley', ':-*' )"
+                tooltiptext="&smiley9Cmd.tooltip;"  />
       <menuitem class="smiley insert-yell menuitem-iconic"   label="&smiley10Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', '>:o' )" 
-                tooltiptext="&smiley10Cmd.tooltip;" />           
+                oncommand="doStatefulCommand('cmd_smiley', '>:o' )"
+                tooltiptext="&smiley10Cmd.tooltip;" />
       <menuitem class="smiley insert-cool menuitem-iconic"   label="&smiley11Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', '8-)' )" 
-                tooltiptext="&smiley11Cmd.tooltip;" />           
+                oncommand="doStatefulCommand('cmd_smiley', '8-)' )"
+                tooltiptext="&smiley11Cmd.tooltip;" />
       <menuitem class="smiley insert-money menuitem-iconic"   label="&smiley12Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', ':-$' )" 
-                tooltiptext="&smiley12Cmd.tooltip;" />           
+                oncommand="doStatefulCommand('cmd_smiley', ':-$' )"
+                tooltiptext="&smiley12Cmd.tooltip;" />
       <menuitem class="smiley insert-foot menuitem-iconic"   label="&smiley13Cmd.label;"
-                oncommand="doStatefulCommand('cmd_smiley', ':-!' )" 
-                tooltiptext="&smiley13Cmd.tooltip;" />           
+                oncommand="doStatefulCommand('cmd_smiley', ':-!' )"
+                tooltiptext="&smiley13Cmd.tooltip;" />
       <menuitem class="smiley insert-innocent menuitem-iconic"   label="&smiley14Cmd.label;"
                 oncommand="doStatefulCommand('cmd_smiley', 'O:-)' )"
-                tooltiptext="&smiley14Cmd.tooltip;" />           
+                tooltiptext="&smiley14Cmd.tooltip;" />
       <menuitem class="smiley insert-cry menuitem-iconic"   label="&smiley15Cmd.label;"
                 oncommand="doStatefulCommand('cmd_smiley', ':\'(' )"
                 tooltiptext="&smiley15Cmd.tooltip;" />
       <menuitem class="smiley insert-sealed menuitem-iconic"   label="&smiley16Cmd.label;"
                 oncommand="doStatefulCommand('cmd_smiley', ':-X' )"
-                tooltiptext="&smiley16Cmd.tooltip;" />           
-          
+                tooltiptext="&smiley16Cmd.tooltip;" />
+
     </menupopup>
   </toolbarbutton>
 
   <menu id="insertMenu">
     <menupopup id="insertMenuPopup">
       <menu id="insertSmiley" label="&insertSmiley.label;" accesskey="&insertSmiley.accesskey;" insertbefore="insertMenuSeparator">
         <menupopup id="smilyMenuPopup">
-          <menuitem class="smiley insert-smile menuitem-iconic"       label="&smiley1Cmd.label;" 
+          <menuitem class="smiley insert-smile menuitem-iconic"       label="&smiley1Cmd.label;"
                     oncommand="doStatefulCommand('cmd_smiley', ':-)'  )" accesskey="&smiley1Cmd.accesskey;"/>
           <menuitem class="smiley insert-frown menuitem-iconic"       label="&smiley2Cmd.label;"
-                    oncommand="doStatefulCommand('cmd_smiley', ':-('  )" accesskey="&smiley2Cmd.accesskey;"/>                                              
+                    oncommand="doStatefulCommand('cmd_smiley', ':-('  )" accesskey="&smiley2Cmd.accesskey;"/>
           <menuitem class="smiley insert-wink menuitem-iconic"        label="&smiley3Cmd.label;"
-                    oncommand="doStatefulCommand('cmd_smiley', ';-)'  )" accesskey="&smiley3Cmd.accesskey;"/>                       
+                    oncommand="doStatefulCommand('cmd_smiley', ';-)'  )" accesskey="&smiley3Cmd.accesskey;"/>
           <menuitem class="smiley insert-tongue menuitem-iconic"      label="&smiley4Cmd.label;"
                     oncommand="doStatefulCommand('cmd_smiley', ':-P'  )" accesskey="&smiley4Cmd.accesskey;"/>
           <menuitem class="smiley insert-laughing menuitem-iconic"    label="&smiley5Cmd.label;"
                     oncommand="doStatefulCommand('cmd_smiley', ':-D'  )" accesskey="&smiley5Cmd.accesskey;"/>
           <menuitem class="smiley insert-embarrassed menuitem-iconic" label="&smiley6Cmd.label;"
                     oncommand="doStatefulCommand('cmd_smiley', ':-['  )" accesskey="&smiley6Cmd.accesskey;"/>
           <menuitem class="smiley insert-undecided menuitem-iconic"   label="&smiley7Cmd.label;"
                     oncommand="doStatefulCommand('cmd_smiley', ':-\\' )" accesskey="&smiley7Cmd.accesskey;"/>
           <menuitem class="smiley insert-surprise menuitem-iconic"   label="&smiley8Cmd.label;"
-                    oncommand="doStatefulCommand('cmd_smiley', '=-O' )" accesskey="&smiley8Cmd.accesskey;"/>           
+                    oncommand="doStatefulCommand('cmd_smiley', '=-O' )" accesskey="&smiley8Cmd.accesskey;"/>
           <menuitem class="smiley insert-kiss menuitem-iconic"   label="&smiley9Cmd.label;"
-                    oncommand="doStatefulCommand('cmd_smiley', ':-*' )" accesskey="&smiley9Cmd.accesskey;"/>           
+                    oncommand="doStatefulCommand('cmd_smiley', ':-*' )" accesskey="&smiley9Cmd.accesskey;"/>
           <menuitem class="smiley insert-yell menuitem-iconic"   label="&smiley10Cmd.label;"
-                    oncommand="doStatefulCommand('cmd_smiley', '>:o' )" accesskey="&smiley10Cmd.accesskey;"/>           
+                    oncommand="doStatefulCommand('cmd_smiley', '>:o' )" accesskey="&smiley10Cmd.accesskey;"/>
           <menuitem class="smiley insert-cool menuitem-iconic"   label="&smiley11Cmd.label;"
-                    oncommand="doStatefulCommand('cmd_smiley', '8-)' )" accesskey="&smiley11Cmd.accesskey;"/>           
+                    oncommand="doStatefulCommand('cmd_smiley', '8-)' )" accesskey="&smiley11Cmd.accesskey;"/>
           <menuitem class="smiley insert-money menuitem-iconic"   label="&smiley12Cmd.label;"
-                    oncommand="doStatefulCommand('cmd_smiley', ':-$' )" accesskey="&smiley12Cmd.accesskey;"/>           
+                    oncommand="doStatefulCommand('cmd_smiley', ':-$' )" accesskey="&smiley12Cmd.accesskey;"/>
           <menuitem class="smiley insert-foot menuitem-iconic"   label="&smiley13Cmd.label;"
-                    oncommand="doStatefulCommand('cmd_smiley', ':-!' )" accesskey="&smiley13Cmd.accesskey;"/>           
+                    oncommand="doStatefulCommand('cmd_smiley', ':-!' )" accesskey="&smiley13Cmd.accesskey;"/>
           <menuitem class="smiley insert-innocent menuitem-iconic"   label="&smiley14Cmd.label;"
-                    oncommand="doStatefulCommand('cmd_smiley', 'O:-)' )" accesskey="&smiley14Cmd.accesskey;"/>           
+                    oncommand="doStatefulCommand('cmd_smiley', 'O:-)' )" accesskey="&smiley14Cmd.accesskey;"/>
           <menuitem class="smiley insert-cry menuitem-iconic"   label="&smiley15Cmd.label;"
-                    oncommand="doStatefulCommand('cmd_smiley', ':\'(' )" accesskey="&smiley15Cmd.accesskey;"/>           
+                    oncommand="doStatefulCommand('cmd_smiley', ':\'(' )" accesskey="&smiley15Cmd.accesskey;"/>
           <menuitem class="smiley insert-sealed menuitem-iconic"   label="&smiley16Cmd.label;"
-                    oncommand="doStatefulCommand('cmd_smiley', ':-X' )" accesskey="&smiley16Cmd.accesskey;"/>            
+                    oncommand="doStatefulCommand('cmd_smiley', ':-X' )" accesskey="&smiley16Cmd.accesskey;"/>
         </menupopup>
-      </menu>           
+      </menu>
     </menupopup>
   </menu>
 </overlay>
--- a/editor/ui/composer/content/editorTasksOverlay.xul
+++ b/editor/ui/composer/content/editorTasksOverlay.xul
@@ -15,18 +15,18 @@
     <key id="key_editor" key="&editorCmd.commandkey;" command="Tasks:Editor" modifiers="accel"/>
   </keyset>
 
   <commandset id="tasksCommands">
     <command id="Tasks:Editor" oncommand="toEditor();"/>
   </commandset>
 
   <statusbarpanel id="component-bar">
-    <toolbarbutton class="taskbutton" id="mini-comp" command="Tasks:Editor" 
+    <toolbarbutton class="taskbutton" id="mini-comp" command="Tasks:Editor"
                    tooltiptext="&taskComposer.tooltip;" insertafter="mini-nav"/>
   </statusbarpanel>
-  
+
   <menupopup id="windowPopup">
     <menuitem label="&editorCmd.label;" accesskey="&editorCmd.accesskey;" key="key_editor" command="Tasks:Editor" id="tasksMenuEditor" insertafter="IMMenuItem,tasksMenuNavigator" class="menuitem-iconic icon-composer16 menu-iconic"/>
   </menupopup>
-  
-</overlay>         
 
+</overlay>
+
--- a/editor/ui/composer/content/pref-editing.js
+++ b/editor/ui/composer/content/pref-editing.js
@@ -86,17 +86,17 @@ function UpdateDependent(aCustomEnabled)
     SetColorPreview("activeLinkText", Services.prefs.getCharPref("browser.active_color"));
     SetColorPreview("visitedLinkText", Services.prefs.getCharPref("browser.visited_color"));
   }
 }
 
 function ToggleElements(aCustomEnabled)
 {
   var buttons = document.getElementById("color-rows").getElementsByTagName("button");
-  
+
   for (var i = 0; i < buttons.length; i++)
   {
     let isLocked = CheckLocked(buttons[i].id);
     buttons[i].disabled = !aCustomEnabled || isLocked;
     buttons[i].previousSibling.disabled = !aCustomEnabled || isLocked;
     buttons[i].firstChild.setAttribute("default", !aCustomEnabled || isLocked);
   }
 }
--- a/editor/ui/composer/content/pref-editing.xul
+++ b/editor/ui/composer/content/pref-editing.xul
@@ -1,9 +1,9 @@
-<?xml version="1.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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
 <!DOCTYPE overlay SYSTEM "chrome://editor/locale/pref-editing.dtd">
 
@@ -45,81 +45,81 @@
                   type="string"
                   onchange="UpdateBgImagePreview(this.value);"/>
     </preferences>
 
     <stringbundle id="bundle_editor"
                   src="chrome://editor/locale/editor.properties"/>
 
     <vbox>
-      <label value="&authorName.label;" 
+      <label value="&authorName.label;"
              accesskey="&authorName.accesskey;"
              control="editorAuthor">
       </label>
       <hbox>
         <textbox id="editorAuthor"
                  flex="1"
                  preference="editor.author"/>
         <spacer flex="1"/>
       </hbox>
     </vbox>
     <spacer class="smallspacer"/>
     <groupbox align="start">
-      <caption label="&pageColorHeader;"/> 
+      <caption label="&pageColorHeader;"/>
       <radiogroup id="useCustomColors"
                   preference="editor.use_custom_colors">
         <radio id="defaultColorsRadio"
-               value="false" 
+               value="false"
                label="&defaultColors.label;"
                accesskey="&defaultColors.accesskey;"/>
-        <radio id="customColorsRadio" 
+        <radio id="customColorsRadio"
                value="true"
                label="&customColors.label;"
                accesskey="&customColors.accesskey;"/>
       </radiogroup>
       <hbox class="indent">
         <grid>
           <columns><column/><column/></columns>
           <rows id="color-rows">
             <row align="center">
               <label id="textLabel"
-                     value="&normalText.label;&colon.character;" 
+                     value="&normalText.label;&colon.character;"
                      accesskey="&normalText.accesskey;"
                      control="text"/>
               <button id="text"
                       class="color-button"
                       oncommand="GetColorAndUpdatePref('Text', 'text');">
                 <spacer id="textCW" class="color-well"/>
               </button>
             </row>
             <row align="center">
               <label id="linkLabel"
-                     value="&linkText.label;&colon.character;" 
+                     value="&linkText.label;&colon.character;"
                      accesskey="&linkText.accesskey;"
                      control="link"/>
               <button id="link"
                       class="color-button"
                       oncommand="GetColorAndUpdatePref('Link', 'link');">
                 <spacer id="linkCW" class="color-well"/>
               </button>
             </row>
             <row align="center">
               <label id="activeLinkLabel"
-                     value="&activeLinkText.label;&colon.character;" 
+                     value="&activeLinkText.label;&colon.character;"
                      accesskey="&activeLinkText.accesskey;"
                      control="active_link"/>
               <button id="active_link"
                       class="color-button"
                       oncommand="GetColorAndUpdatePref('ActiveLink', 'active_link');">
                 <spacer id="activeCW" class="color-well"/>
               </button>
             </row>
             <row align="center">
               <label id="visitedLinkLabel"
-                     value ="&visitedLinkText.label;&colon.character;" 
+                     value ="&visitedLinkText.label;&colon.character;"
                      accesskey="&visitedLinkText.accesskey;"
                      control="followed_link"/>
               <button id="followed_link"
                       class="color-button"
                       oncommand="GetColorAndUpdatePref('VisitedLink', 'followed_link');">
                 <spacer id="visitedCW" class="color-well"/>
               </button>
             </row>
--- a/editor/ui/composer/content/pref-toolbars.xul
+++ b/editor/ui/composer/content/pref-toolbars.xul
@@ -106,17 +106,17 @@
                   preference="editor.toolbars.showbutton.open"/>
         <checkbox id="showSave"
                   label="&save.label;"
                   preference="editor.toolbars.showbutton.save"/>
         <checkbox id="showPublish"
                   label="&publish.label;"
                   preference="editor.toolbars.showbutton.publish"/>
         <checkbox id="showPreview"
-                  label="&preview.label;"   
+                  label="&preview.label;"
                   preference="editor.toolbars.showbutton.preview"/>
       </vbox>
       <vbox flex="1">
         <checkbox id="showCut"
                   label="&cut.label;"
                   preference="editor.toolbars.showbutton.cut"/>
         <checkbox id="showCopy"
                   label="&copy.label;"
--- a/editor/ui/composer/content/publishprefs.js
+++ b/editor/ui/composer/content/publishprefs.js
@@ -54,17 +54,17 @@ function GetPublishSiteData()
 
 
   return siteArray;
 }
 
 function GetDefaultPublishSiteName()
 {
   var publishBranch = GetPublishPrefsBranch();
-  var name = "";  
+  var name = "";
   if (publishBranch)
     name = GetPublishStringPref(publishBranch, "default_site");
 
   return name;
 }
 
 // Return object with all info needed to publish
 //   from database of sites previously published to.
@@ -79,17 +79,17 @@ function CreatePublishDataFromUrl(docUrl
     var dirObj = {};
     var index = FindSiteIndexAndDocDir(pubSiteData, docUrl, dirObj);
     var publishData;
     if (index != -1)
     {
       publishData = pubSiteData[index];
       publishData.docDir = FormatDirForPublishing(dirObj.value)
 
-      //XXX Problem: OtherDir: How do we decide when to use the dir in 
+      //XXX Problem: OtherDir: How do we decide when to use the dir in
       //    publishSiteData (default DocDir) or docDir from current filepath?
       publishData.otherDir = FormatDirForPublishing(pubSiteData[index].otherDir);
 
       publishData.filename = GetFilename(docUrl);
       publishData.notInSiteData = false;
       return publishData;
     }
   }
@@ -104,17 +104,17 @@ function CreatePublishDataFromUrl(docUrl
 
   // Strip off filename
   var lastSlash = pubUrl.lastIndexOf("\/");
   //XXX Look for "?", "=", and "&" ?
   pubUrl = pubUrl.slice(0, lastSlash+1);
 
   var siteName = CreateSiteNameFromUrl(pubUrl, pubSiteData);
 
-  publishData = { 
+  publishData = {
     siteName : siteName,
     previousSiteName : siteName,
     filename : GetFilename(docUrl),
     username : userObj.value,
     password : passObj.value,
     savePassword : false,
     publishUrl : pubUrl,
     browseUrl  : pubUrl,
@@ -136,17 +136,17 @@ function CreateSiteNameFromUrl(url, publ
   var siteName = host + schemePostfix;
 
   if (publishSiteData)
   {
     // Look for duplicates. Append "-1"  etc until unique name found
     var i = 1;
     var exists = false;
     do {
-      exists = PublishSiteNameExists(siteName, publishSiteData, -1)  
+      exists = PublishSiteNameExists(siteName, publishSiteData, -1)
       if (exists)
         siteName = host + "-" + i + schemePostfix;
       i++;
     }
     while (exists);
   }
   return siteName;
 }
@@ -197,30 +197,30 @@ function GetDefaultPublishData()
 function GetPublishData_internal(publishBranch, siteName)
 {
   if (!publishBranch || !siteName)
     return null;
 
   var prefPrefix = "site_data." + siteName + ".";
 
   // We must have a publish url, else we ignore this site
-  // (siteData and siteNames for sites with incomplete data 
+  // (siteData and siteNames for sites with incomplete data
   //  will get deleted by SavePublishSiteDataToPrefs)
   var publishUrl = GetPublishStringPref(publishBranch, prefPrefix+"url");
   if (!publishUrl)
     return null;
 
   var savePassword = false;
   var publishOtherFiles = true;
   try {
     savePassword = publishBranch.getBoolPref(prefPrefix+"save_password");
     publishOtherFiles = publishBranch.getBoolPref(prefPrefix+"publish_other_files");
   } catch (e) {}
 
-  var publishData = { 
+  var publishData = {
     siteName : siteName,
     previousSiteName : siteName,
     filename : "",
     username : GetPublishStringPref(publishBranch, prefPrefix+"username"),
     savePassword : savePassword,
     publishUrl : publishUrl,
     browseUrl  : GetPublishStringPref(publishBranch, prefPrefix+"browse_url"),
     docDir     : FormatDirForPublishing(GetPublishStringPref(publishBranch, prefPrefix+"doc_dir")),
@@ -240,18 +240,18 @@ function GetPublishData_internal(publish
     {
       try {
         publishPrefsBranch.setBoolPref(prefPrefix+"save_password", true);
       } catch (e) {}
     }
     publishData.savePassword = true;
   }
 
-  // Build history list of directories 
-  // Always supply the root dir 
+  // Build history list of directories
+  // Always supply the root dir
   publishData.dirList = [""];
 
   // Get the rest from prefs
   var dirCount = {value:0};
   var dirPrefs;
   try {
     dirPrefs = publishBranch.getChildList(prefPrefix+"dir.", dirCount);
   } catch (e) {}
@@ -298,17 +298,17 @@ function SavePublishSiteDataToPrefs(site
       }
       // Assure that we have a default name
       if (siteArray.length && !defaultFound)
         defaultName = siteArray[0].siteName;
     }
 
     // Save default site name
     SetPublishStringPref(publishBranch, "default_site", defaultName);
-  
+
     // Force saving to file so next page edited finds these values
     SavePrefFile();
   }
   catch (ex) { return false; }
 
   return true;
 }
 
@@ -336,17 +336,17 @@ function SavePublishDataToPrefs(publishD
   if (!siteNamePrefs || siteCount.value == 0)
   {
     // We currently have no site prefs, so create them
     var siteData = [publishData];
     return SavePublishSiteDataToPrefs(siteData, publishData.siteName);
   }
 
   // Use "previous" name if available in case it was changed
-  var previousSiteName =  ("previousSiteName" in publishData && publishData.previousSiteName) ? 
+  var previousSiteName =  ("previousSiteName" in publishData && publishData.previousSiteName) ?
                             publishData.previousSiteName : publishData.siteName;
 
   // Find site number of existing site or fall through at next available one
   // (Number is arbitrary; needed to construct unique "site_name.x" pref string)
   for (var i = 0; i < siteCount.value; i++)
   {
     var siteName = GetPublishStringPref(publishBranch, "site_name."+i);
 
@@ -363,17 +363,17 @@ function SavePublishDataToPrefs(publishD
   // We've taken care of finding old duplicate, so be sure 'previous name' is current
   publishData.previousSiteName = publishData.siteName;
 
   var ret = SavePublishData_Internal(publishBranch, publishData, i);
   if (ret)
   {
     // Check if siteName was the default and we need to update that
     var defaultSiteName = GetPublishStringPref(publishBranch, "default_site");
-    if (previousSiteName == defaultSiteName 
+    if (previousSiteName == defaultSiteName
         && publishData.siteName != defaultSiteName)
       SetPublishStringPref(publishBranch, "default_site", publishData.siteName);
 
     SavePrefFile();
 
     // Clear signal to save these data
     if ("notInSiteData" in publishData && publishData.notInSiteData)
       publishData.notInSiteData = false;
@@ -391,39 +391,39 @@ function SavePublishData_Internal(publis
 
   FixupUsernamePasswordInPublishData(publishData);
 
   var prefPrefix = "site_data." + publishData.siteName + "."
 
   SetPublishStringPref(publishPrefsBranch, prefPrefix+"url", publishData.publishUrl);
   SetPublishStringPref(publishPrefsBranch, prefPrefix+"browse_url", publishData.browseUrl);
   SetPublishStringPref(publishPrefsBranch, prefPrefix+"username", publishData.username);
-  
+
   try {
     publishPrefsBranch.setBoolPref(prefPrefix+"save_password", publishData.savePassword);
     publishPrefsBranch.setBoolPref(prefPrefix+"publish_other_files", publishData.publishOtherFiles);
   } catch (e) {}
 
-  // Save password using PasswordManager 
+  // Save password using PasswordManager
   // (If publishData.savePassword = false, this clears existing password)
   SavePassword(publishData);
 
-  SetPublishStringPref(publishPrefsBranch, prefPrefix+"doc_dir", 
+  SetPublishStringPref(publishPrefsBranch, prefPrefix+"doc_dir",
                        FormatDirForPublishing(publishData.docDir));
 
   if (publishData.publishOtherFiles && publishData.otherDir)
     SetPublishStringPref(publishPrefsBranch, prefPrefix+"other_dir",
                          FormatDirForPublishing(publishData.otherDir));
 
   if ("saveDirs" in publishData && publishData.saveDirs)
   {
     if (publishData.docDir)
       AppendNewDirToList(publishData, publishData.docDir);
 
-    if (publishData.publishOtherFiles && publishData.otherDir 
+    if (publishData.publishOtherFiles && publishData.otherDir
         && publishData.otherDir != publishData.docDir)
       AppendNewDirToList(publishData, publishData.otherDir);
   }
 
   // Save array of subdirectories with site
   if (publishData.dirList.length)
   {
     publishData.dirList.sort();
@@ -624,32 +624,32 @@ function PublishSiteNameExists(name, pub
       return true;
   }
   return false;
 }
 
 // Find index of a site record in supplied publish site database
 // docUrl: Document URL with or without filename
 //         (Must end in "/" if no filename)
-// dirObj.value =  the directory of the document URL 
+// dirObj.value =  the directory of the document URL
 //      relative to the base publishing URL, using "" if none
 //
 // XXX: Currently finds the site with the longest-matching url;
 //      should we look for the shortest instead? Or match just the host portion?
 function FindSiteIndexAndDocDir(publishSiteData, docUrl, dirObj)
 {
   if (dirObj)
     dirObj.value = "";
 
   if (!publishSiteData || !docUrl || GetScheme(docUrl) == "file")
     return -1;
 
   var siteIndex = -1;
   var siteUrlLen = 0;
-  
+
   for (var i = 0; i < publishSiteData.length; i++)
   {
     // Site publish or browse url needs to be contained in document URL,
     //  but that may also have a directory after the site base URL
     //  So we must examine all records to find the site URL that best
     //    matches the document URL: the longest-matching substring (XXX is this right?)
     var lenObj = {value:0};
     var tempData = Clone(publishSiteData[i]);
@@ -669,45 +669,45 @@ function FindSiteIndexAndDocDir(publishS
   }
   return siteIndex;
 }
 
 // Look for a matching publish url within the document url
 // (We need to look at both "publishUrl" and "browseUrl" in case we are editing
 //  an http: document but using ftp: to publish.)
 // If match is found:
-//    Fill in the filename and subirectory based on the docUrl and 
+//    Fill in the filename and subirectory based on the docUrl and
 //    return the length of the docUrl with username+password stripped out
 function FillInMatchingPublishData(publishData, docUrl)
 {
   if (!publishData || !docUrl)
     return 0;
 
   // Separate docUrl into the base url and filename
   var lastSlash = docUrl.lastIndexOf("\/");
   var baseUrl = docUrl.slice(0, lastSlash+1);
   var filename = docUrl.slice(lastSlash+1);
-    
+
   // Strip username+password from docUrl because these
   //  are stored separately in publishData, never embedded in the publishUrl
   // If both docUrl and publishData contain usernames,
   //   we must match that as well as the url
   var username = {value:""};
-  baseUrl = StripUsernamePassword(baseUrl, username); 
+  baseUrl = StripUsernamePassword(baseUrl, username);
   username = username.value;
 
   var matchedLength = 0;
   let pubUrlFound = publishData.publishUrl && baseUrl.startsWith(publishData.publishUrl);
   let browseUrlFound = publishData.browseUrl && baseUrl.startsWith(publishData.browseUrl);
 
-  if ((pubUrlFound || browseUrlFound) 
+  if ((pubUrlFound || browseUrlFound)
       && (!username || !publishData.username || username == publishData.username))
   {
     // We found a match
-    matchedLength = pubUrlFound ? publishData.publishUrl.length 
+    matchedLength = pubUrlFound ? publishData.publishUrl.length
                             : publishData.browseUrl.length;
 
     if (matchedLength > 0)
     {
       publishData.filename = filename;
 
       // Subdirectory within the site is what's left in baseUrl after the matched portion
       publishData.docDir = FormatDirForPublishing(baseUrl.slice(matchedLength));
@@ -750,17 +750,17 @@ function FormatUrlForPublishing(url)
     var lastChar = url.charAt(url.length-1);
     if (lastChar != "/" && lastChar != "=" && lastChar != "&" && lastChar  != "?")
       return (url + "/");
   }
   return url;
 }
 
 // Username and password present in publish url are
-//  extracted into the separate "username" and "password" fields 
+//  extracted into the separate "username" and "password" fields
 //  of the publishData object
 // Returns true if we did change the publishData
 function FixupUsernamePasswordInPublishData(publishData)
 {
   var ret = false;
   if (publishData && publishData.publishUrl)
   {
     var userObj = {value:""};
--- a/editor/ui/dialogs/content/EdAEAttributes.js
+++ b/editor/ui/dialogs/content/EdAEAttributes.js
@@ -116,17 +116,17 @@ var gTarget =
     "!"  Allow only one character
     "^"  The first character can be only be A-Z, a-z, hyphen, underscore, colon or period
     "$"  is an attribute required by HTML DTD
 */
 
 /*
    Most elements have the "dir" attribute,
    so we use this value array
-   for all elements instead of specifying  
+   for all elements instead of specifying
    separately for each element
 */
 gHTMLAttr.all_dir =
 [
   "ltr",
   "rtl"
 ];
 
@@ -302,17 +302,17 @@ gHTMLAttr.base_target = gTarget;
 // this is deprecated //
 gHTMLAttr.basefont =
 [
   "^id",
   "$size",
   "color",
   "face"
 ];
- 
+
 gHTMLAttr.basefont_color = gHTMLColors;
 
 gHTMLAttr.bdo =
 [
   "_core",
   "-",
   "^lang",
   "$dir"
@@ -326,17 +326,17 @@ gHTMLAttr.bdo_dir =
 
 gHTMLAttr.big =
 [
   "_core",
   "-",
   "^lang",
   "dir"
 ];
- 
+
 gHTMLAttr.blockquote =
 [
   "cite",
   "-",
   "_core",
   "-",
   "^lang",
   "dir"
@@ -783,17 +783,17 @@ gHTMLAttr.hr =
   "_core",
   "-",
   "^lang",
   "dir"
 ];
 
 gHTMLAttr.hr_align = gHAlign;
 
-gHTMLAttr.hr_noshade = 
+gHTMLAttr.hr_noshade =
 [
   "noshade"
 ];
 
 
 gHTMLAttr.html =
 [
   "version",
@@ -1197,17 +1197,17 @@ gHTMLAttr.ol =
   "dir"
 ];
 
 gHTMLAttr.ol_type =
 [
   "1",
   "a",
   "A",
-  "i",     
+  "i",
   "I"
 ];
 
 gHTMLAttr.ol_compact =
 [
   "compact"
 ];
 
@@ -1713,18 +1713,18 @@ gHTMLAttr._var =
 [
   "_core",
   "-",
   "^lang",
   "dir"
 ];
 
 // ================ JS Attributes ================ //
-// These are element specific even handlers. 
-/* Most all elements use gCoreJSEvents, so those 
+// These are element specific even handlers.
+/* Most all elements use gCoreJSEvents, so those
    are assumed except for those listed here with "noEvents"
 */
 
 gJSAttr.a =
 [
   "onfocus",
   "onblur"
 ];
--- a/editor/ui/dialogs/content/EdAECSSAttributes.js
+++ b/editor/ui/dialogs/content/EdAECSSAttributes.js
@@ -110,29 +110,29 @@ function UpdateCSSAttributes()
     else
       styleString += name + ": " + value + "; ";
   }
   if (styleString)
   {
     // Use editor transactions if modifying the element directly in the document
     doRemoveAttribute("style");
     doSetAttribute("style", styleString);  // NOTE BUG 18894!!!
-  } 
+  }
   else if (gElement.getAttribute("style"))
     doRemoveAttribute("style");
 }
 
 function RemoveCSSAttribute()
 {
   // We only allow 1 selected item
   if (gDialog.AddCSSAttributeTree.view.selection.count)
   {
     // Remove the item from the tree
     // We always rebuild complete "style" string,
-    //  so no list of "removed" items 
+    //  so no list of "removed" items
     getSelectedItem(gDialog.AddCSSAttributeTree).remove();
 
     ClearCSSInputWidgets();
   }
 }
 
 function SelectCSSTree( index )
 {
--- a/editor/ui/dialogs/content/EdAEHTMLAttributes.js
+++ b/editor/ui/dialogs/content/EdAEHTMLAttributes.js
@@ -1,16 +1,16 @@
 /* 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/. */
 
 function BuildHTMLAttributeNameList()
 {
   gDialog.AddHTMLAttributeNameInput.removeAllItems();
-  
+
   var elementName = gElement.localName;
   var attNames = gHTMLAttr[elementName];
 
   if (attNames && attNames.length)
   {
     var menuitem;
 
     for (var i = 0; i < attNames.length; i++)
@@ -39,17 +39,17 @@ function BuildHTMLAttributeNameList()
       {
         // Signal for separator
         var popup = gDialog.AddHTMLAttributeNameInput.firstChild;
         if (popup)
         {
           var sep = document.createElementNS(XUL_NS, "menuseparator");
           if (sep)
             popup.appendChild(sep);
-        }        
+        }
       }
       else
       {
         // Get information about value filtering
         let forceOneChar = name.includes("!");
         let forceInteger = name.includes("#");
         let forceSignedInteger = name.includes("+");
         let forceIntOrPercent = name.includes("%");
@@ -85,17 +85,17 @@ function BuildHTMLAttributeNameList()
   }
 }
 
 // build attribute list in tree form from element attributes
 function BuildHTMLAttributeTable()
 {
   var nodeMap = gElement.attributes;
   var i;
-  if (nodeMap.length > 0) 
+  if (nodeMap.length > 0)
   {
     var added = false;
     for(i = 0; i < nodeMap.length; i++)
     {
       let name = nodeMap[i].name.trim().toLowerCase();
       if ( CheckAttributeNameSimilarity( nodeMap[i].nodeName, HTMLAttrs ) ||
            name.startsWith("on") || name == "style" ) {
         continue;   // repeated or non-HTML attribute, ignore this one and go to next
@@ -149,17 +149,17 @@ function onSelectHTMLTreeItem()
 
 function onInputHTMLAttributeName()
 {
   let attName = gDialog.AddHTMLAttributeNameInput.value.toLowerCase().trim();
 
   // Clear value widget, but prevent triggering update in tree
   gUpdateTreeValue = false;
   gDialog.AddHTMLAttributeValueInput.value = "";
-  gUpdateTreeValue = true; 
+  gUpdateTreeValue = true;
 
   if (attName)
   {
     // Get value list for current attribute name
     var valueListName;
 
     // Most elements have the "dir" attribute,
     //   so we have just one array for the allowed values instead
@@ -182,17 +182,17 @@ function onInputHTMLAttributeName()
     if (valueListName in gHTMLAttr)
     {
       var valueList = gHTMLAttr[valueListName];
 
       listLen = valueList.length;
       if (listLen == 1)
         newValue = valueList[0];
 
-      // Note: For case where "value list" is actually just 
+      // Note: For case where "value list" is actually just
       // one (default) item, don't use menulist for that
       if (listLen > 1)
       {
         gDialog.AddHTMLAttributeValueMenulist.removeAllItems();
 
         if (deckIndex != "1")
         {
           // Switch to using editable menulist
@@ -206,37 +206,37 @@ function onInputHTMLAttributeName()
           {
             // Signal for separator
             var popup = gDialog.AddHTMLAttributeValueInput.firstChild;
             if (popup)
             {
               var sep = document.createElementNS(XUL_NS, "menuseparator");
               if (sep)
                 popup.appendChild(sep);
-            }        
+            }
           } else {
             gDialog.AddHTMLAttributeValueMenulist.appendItem(valueList[i]);
           }
         }
       }
     }
-    
+
     if (listLen <= 1 && deckIndex != "0")
     {
       // No list: Use textbox for input instead
       gDialog.AddHTMLAttributeValueInput = gDialog.AddHTMLAttributeValueTextbox;
       gDialog.AddHTMLAttributeValueDeck.setAttribute("selectedIndex", "0");
     }
 
     // If attribute already exists in tree, use associated value,
     //  else use default found above
     var existingValue = GetAndSelectExistingAttributeValue(attName, "HTMLAList");
     if (existingValue)
       newValue = existingValue;
-      
+
     gDialog.AddHTMLAttributeValueInput.value = newValue;
 
     if (!existingValue)
       onInputHTMLAttributeValue();
   }
 }
 
 function onInputHTMLAttributeValue()
@@ -279,21 +279,21 @@ function onInputHTMLAttributeValue()
       else if ( selectedItem.getAttribute("forceSignedInteger") == "true" )
       {
         // Allow integer with optional "+" or "-" as first character
         var sign = value[0];
         value = value.replace(/\D+/g,"");
         if (sign == "+" || sign == "-")
           value = sign + value;
       }
-      
-      // Special case attributes 
+
+      // Special case attributes
       if (selectedItem.getAttribute("limitFirstChar") == "true")
       {
-        // Limit first character to letter, and all others to 
+        // Limit first character to letter, and all others to
         //  letters, numbers, and a few others
         value = value.replace(/^[^a-zA-Z\u0080-\uFFFF]/, "").replace(/[^a-zA-Z0-9_\.\-\:\u0080-\uFFFF]+/g,'');
       }
 
       // Update once only if it changed
       if (value != gDialog.AddHTMLAttributeValueInput.value)
         gDialog.AddHTMLAttributeValueInput.value = value;
     }
--- a/editor/ui/dialogs/content/EdAEJSEAttributes.js
+++ b/editor/ui/dialogs/content/EdAEJSEAttributes.js
@@ -1,16 +1,16 @@
 /* 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/. */
 
 function BuildJSEAttributeNameList()
 {
   gDialog.AddJSEAttributeNameList.removeAllItems();
-  
+
   // Get events specific to current element
   var elementName = gElement.localName;
   if (elementName in gJSAttr)
   {
     var attNames = gJSAttr[elementName];
     var i;
     var popup;
     var sep;
@@ -32,17 +32,17 @@ function BuildJSEAttributeNameList()
         gDialog.AddJSEAttributeNameList.appendItem(attNames[i], attNames[i]);
 
       popup = gDialog.AddJSEAttributeNameList.firstChild;
       if (popup)
       {
         sep = document.createElementNS(XUL_NS, "menuseparator");
         if (sep)
           popup.appendChild(sep);
-      }        
+      }
     }
   }
 
   // Always add core JS events unless we aborted above
   for (i = 0; i < gCoreJSEvents.length; i++)
   {
     if (gCoreJSEvents[i] == "-")
     {
@@ -52,17 +52,17 @@ function BuildJSEAttributeNameList()
       sep = document.createElementNS(XUL_NS, "menuseparator");
 
       if (popup && sep)
         popup.appendChild(sep);
     }
     else
       gDialog.AddJSEAttributeNameList.appendItem(gCoreJSEvents[i], gCoreJSEvents[i]);
   }
-  
+
   gDialog.AddJSEAttributeNameList.selectedIndex = 0;
 
   // Use current name and value of first tree item if it exists
   onSelectJSETreeItem();
 }
 
 // build attribute list in tree form from element attributes
 function BuildJSEAttributeTable()
@@ -89,17 +89,17 @@ function BuildJSEAttributeTable()
   }
 }
 
 function onSelectJSEAttribute()
 {
   if(!gDoOnSelectTree)
     return;
 
-  gDialog.AddJSEAttributeValueInput.value = 
+  gDialog.AddJSEAttributeValueInput.value =
       GetAndSelectExistingAttributeValue(gDialog.AddJSEAttributeNameList.label, "JSEAList");
 }
 
 function onSelectJSETreeItem()
 {
   var tree = gDialog.AddJSEAttributeTree;
   if (tree && tree.view.selection.count)
   {
@@ -117,17 +117,17 @@ function onInputJSEAttributeValue()
 {
   if (gUpdateTreeValue)
   {
 
     var name = TrimString(gDialog.AddJSEAttributeNameList.label);
     var value = TrimString(gDialog.AddJSEAttributeValueInput.value);
 
     // Update value in the tree list
-    // Since we have a non-editable menulist, 
+    // Since we have a non-editable menulist,
     //   we MUST automatically add the event attribute if it doesn't exist
     if (!UpdateExistingAttribute( name, value, "JSEAList" ) && value)
       AddTreeItem( name, value, "JSEAList", JSEAttrs );
   }
 }
 
 function editJSEAttributeValue(targetCell)
 {
@@ -156,17 +156,17 @@ function UpdateJSEAttributes()
 
     // set the event handler
     doSetAttribute( GetTreeItemAttributeStr(item), GetTreeItemValueStr(item) );
   }
 }
 
 function RemoveJSEAttribute()
 {
-  // This differs from HTML and CSS panels: 
+  // This differs from HTML and CSS panels:
   // We reselect after removing, because there is not
   //  editable attribute name input, so we can't clear that
   //  like we do in other panels
   var newIndex = gDialog.AddJSEAttributeTree.selectedIndex;
 
   // We only allow 1 selected item
   if (gDialog.AddJSEAttributeTree.view.selection.count)
   {
--- a/editor/ui/dialogs/content/EdAdvancedEdit.js
+++ b/editor/ui/dialogs/content/EdAdvancedEdit.js
@@ -65,17 +65,17 @@ function Startup()
   gDialog.AddJSEAttributeValueInput     = document.getElementById("AddJSEAttributeValueInput");
   gDialog.AddJSEAttributeTree           = document.getElementById("JSEATree");
   gDialog.okButton                      = document.documentElement.getButton("accept");
 
   // build the attribute trees
   BuildHTMLAttributeTable();
   BuildCSSAttributeTable();
   BuildJSEAttributeTable();
-  
+
   // Build attribute name arrays for menulists
   BuildJSEAttributeNameList();
   BuildHTMLAttributeNameList();
   // No menulists for CSS panel (yet)
 
   // Set focus to Name editable menulist in HTML panel
   SetTextboxFocus(gDialog.AddHTMLAttributeNameInput);
 
@@ -175,17 +175,17 @@ function UpdateExistingAttribute( attNam
   {
     var item = treeChildren.childNodes[i];
     name = GetTreeItemAttributeStr(item);
     if (name.toLowerCase() == attName)
     {
       // Set the text in the "value' column treecell
       SetTreeItemValueStr(item, attValue);
 
-      // Select item just changed, 
+      // Select item just changed,
       //  but don't trigger the tree's onSelect handler
       gDoOnSelectTree = false;
       try {
         selectTreeItem(treeChildren, item);
       } catch (e) {}
       gDoOnSelectTree = true;
 
       return true;
@@ -232,17 +232,17 @@ function GetAndSelectExistingAttributeVa
   try {
     treeChildren.parentNode.view.selection.clearSelection();
   } catch (e) {}
   gDoOnSelectTree = true;
 
   return "";
 }
 
-/* Tree structure: 
+/* Tree structure:
   <treeItem>
     <treeRow>
       <treeCell> // Name Cell
       <treeCell  // Value Cell
 */
 function GetTreeItemAttributeStr(treeItem)
 {
   if (treeItem)
--- a/editor/ui/dialogs/content/EdAdvancedEdit.xul
+++ b/editor/ui/dialogs/content/EdAdvancedEdit.xul
@@ -34,19 +34,19 @@
   <script type="application/javascript" src="chrome://editor/content/EdAdvancedEdit.js"/>
 
   <broadcaster id="args" value=""/>
 
   <hbox>
     <label value="&currentattributesfor.label;"/>
     <label class="header" id="tagLabel"/>
   </hbox>
-  
+
   <separator class="thin"/>
-  
+
   <tabbox flex="1">
     <tabs>
       <tab label="&tabHTML.label;"/>
       <tab label="&tabCSS.label;"/>
       <tab label="&tabJSE.label;" id="tabJSE"/>
     </tabs>
     <tabpanels flex="1">
       <!-- ============================================================== -->
--- a/editor/ui/dialogs/content/EdButtonProps.xul
+++ b/editor/ui/dialogs/content/EdButtonProps.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorButtonProperties.dtd">
 <dialog title="&windowTitle.label;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup();"
         buttons="accept,cancel"
         ondialogaccept="return onAccept();"
         ondialogcancel="return onCancel();">
--- a/editor/ui/dialogs/content/EdColorPicker.js
+++ b/editor/ui/dialogs/content/EdColorPicker.js
@@ -14,17 +14,17 @@ var TextType = false;
 var HighlightType = false;
 var TableOrCell = false;
 var LastPickedIsDefault = true;
 var NoDefault = false;
 var gColorObj;
 
 // dialog initialization code
 function Startup()
-{ 
+{
   if (!window.arguments[1])
   {
     dump("EdColorPicker: Missing color object param\n");
     return;
   }
 
   // window.arguments[1] is object to get initial values and return color data
   gColorObj = window.arguments[1];
@@ -35,23 +35,23 @@ function Startup()
   gDialog.LastPickedButton = document.getElementById("LastPickedButton");
   gDialog.LastPickedColor  = document.getElementById("LastPickedColor");
   gDialog.CellOrTableGroup = document.getElementById("CellOrTableGroup");
   gDialog.TableRadio       = document.getElementById("TableRadio");
   gDialog.CellRadio        = document.getElementById("CellRadio");
   gDialog.ColorSwatch      = document.getElementById("ColorPickerSwatch");
   gDialog.Ok               = document.documentElement.getButton("accept");
 
-  // The type of color we are setting: 
-  //  text: Text, Link, ActiveLink, VisitedLink, 
+  // The type of color we are setting:
+  //  text: Text, Link, ActiveLink, VisitedLink,
   //  or background: Page, Table, or Cell
   if (gColorObj.Type)
   {
     ColorType = gColorObj.Type;
-    // Get string for dialog title from passed-in type 
+    // Get string for dialog title from passed-in type
     //   (note constraint on editor.properties string name)
     let IsCSSPrefChecked = Services.prefs.getBoolPref("editor.use_css");
 
     if (GetCurrentEditor())
     {
       if (ColorType == "Page" && IsCSSPrefChecked && IsHTMLEditor())
         document.title = GetString("BlockColor");
       else
@@ -237,26 +237,26 @@ function SetDefaultToOk()
 }
 
 function ValidateData()
 {
   if (LastPickedIsDefault)
     gColor = LastPickedColor;
   else
     gColor = gDialog.ColorInput.value;
-  
+
   gColor = TrimString(gColor).toLowerCase();
 
   // TODO: Validate the color string!
 
   if (NoDefault && !gColor)
   {
     ShowInputErrorMessage(GetString("NoColorError"));
     SetTextboxFocus(gDialog.ColorInput);
-    return false;   
+    return false;
   }
   return true;
 }
 
 function onAccept()
 {
   if (!ValidateData())
     return false;
--- a/editor/ui/dialogs/content/EdColorPicker.xul
+++ b/editor/ui/dialogs/content/EdColorPicker.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EdColorPicker.dtd">
 
 <dialog title="&windowTitle.label;"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     onload="Startup()"
     ondialogaccept="return onAccept();"
     ondialogcancel="return onCancelColor();">
@@ -25,17 +25,17 @@
 
   <hbox id="TableOrCellGroup" align="center" collapsed="true">
     <label control="CellOrTableGroup" value="&background.label;" accesskey="&background.accessKey;"/>
     <radiogroup id="CellOrTableGroup" orient="horizontal">
       <radio id="TableRadio" label="&table.label;" accesskey="&table.accessKey;"/>
       <radio id="CellRadio"  label="&cell.label;"  accesskey="&cell.accessKey;"/>
   </radiogroup>
   </hbox>
-  <colorpicker id="ColorPicker" palettename="standard" 
+  <colorpicker id="ColorPicker" palettename="standard"
     persist="palettename"
     onclick="SetDefaultToOk();"
     ondblclick="if (onAccept()) window.close();"
     onkeypress="SelectColorByKeypress(event);"
     onselect="SelectColor();"/>
 <!-- Web palette is not implemented???
   <hbox align="center">
     <label value="&palette.label;"/>
--- a/editor/ui/dialogs/content/EdColorProps.js
+++ b/editor/ui/dialogs/content/EdColorProps.js
@@ -119,17 +119,17 @@ function InitDialog()
   customTextColor        = GetHTMLOrCSSStyleValue(globalElement, textStr, cssColorStr);
   customTextColor        = ConvertRGBColorIntoHEXColor(customTextColor);
   customLinkColor        = globalElement.getAttribute(linkStr);
   customActiveColor      = globalElement.getAttribute(alinkStr);
   customVisitedColor     = globalElement.getAttribute(vlinkStr);
   customBackgroundColor  = GetHTMLOrCSSStyleValue(globalElement, bgcolorStr, cssBackgroundColorStr);
   customBackgroundColor  = ConvertRGBColorIntoHEXColor(customBackgroundColor);
 
-  var haveCustomColor = 
+  var haveCustomColor =
         customTextColor       ||
         customLinkColor       ||
         customVisitedColor    ||
         customActiveColor     ||
         customBackgroundColor;
 
   // Set default color explicitly for any that are missing
   // PROBLEM: We are using "windowtext" and "window" for the Windows OS
@@ -143,17 +143,17 @@ function InitDialog()
   if (!customBackgroundColor) customBackgroundColor = defaultBackgroundColor;
 
   if (haveCustomColor)
   {
     // If any colors are set, then check the "Custom" radio button
     gDialog.PageColorGroup.selectedItem = gDialog.CustomColorsRadio;
     UseCustomColors();
   }
-  else 
+  else
   {
     gDialog.PageColorGroup.selectedItem = gDialog.DefaultColorsRadio;
     UseDefaultColors();
   }
 }
 
 function GetColorAndUpdate(ColorWellID)
 {
@@ -211,17 +211,17 @@ function GetColorAndUpdate(ColorWellID)
     case "visitedCW":
       color = customVisitedColor = colorObj.TextColor;
       break;
     case "backgroundCW":
       color = customBackgroundColor = colorObj.BackgroundColor;
       break;
   }
 
-  setColorWell(ColorWellID, color); 
+  setColorWell(ColorWellID, color);
   SetColorPreview(ColorWellID, color);
 }
 
 function SetColorPreview(ColorWellID, color)
 {
   switch( ColorWellID )
   {
     case "textCW":
@@ -397,19 +397,19 @@ function ValidateData()
 
     if (ValidateAndPreviewImage(true))
     {
       // A valid image may be null for no image
       if (gBackgroundImage)
         globalElement.setAttribute(backgroundStr, gBackgroundImage);
       else
         editor.removeAttributeOrEquivalent(globalElement, backgroundStr, true);
-  
+
       return true;
-    }  
+    }
   } catch (e) {}
   return false;
 }
 
 function onAccept()
 {
   if (ValidateData())
   {
--- a/editor/ui/dialogs/content/EdColorProps.xul
+++ b/editor/ui/dialogs/content/EdColorProps.xul
@@ -2,17 +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://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorColorProperties.dtd">
 
 <dialog title="&windowTitle.label;"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     onload="Startup()"
     ondialogaccept="return onAccept();"
     ondialogcancel="return onCancel();">
--- a/editor/ui/dialogs/content/EdConvertToTable.js
+++ b/editor/ui/dialogs/content/EdConvertToTable.js
@@ -97,17 +97,17 @@ function onAccept()
 
   // Replace nbsp with spaces:
   str = str.replace(/\u00a0/g, " ");
 
   // Strip out </p> completely
   str = str.replace(/\s*<\/p>\s*/g, "");
 
   // Trim whitespace adjacent to <p> and <br> tags
-  //  and replace <p> with <br> 
+  //  and replace <p> with <br>
   //  (which will be replaced with </tr> below)
   str = str.replace(/\s*<p>\s*|\s*<br>\s*/g, "<br>");
 
   // Trim leading <br>s
   str = str.replace(/^(<br>)+/, "");
 
   // Trim trailing <br>s
   str = str.replace(/(<br>)+$/, "");
@@ -137,22 +137,22 @@ function onAccept()
     {
       end = str.indexOf(">", start+1);
       if (end > start)
       {
         let tagContent = str.slice(start + 1, end).trim();
 
         if (/^ol|^ul|^dl/.test(tagContent))
         {
-          //  Replace list tag with <BR> to start new row 
+          //  Replace list tag with <BR> to start new row
           //   at beginning of second or greater list tag
           str = str.slice(0, start) + listSeparator + str.slice(end+1);
           if (listSeparator == "")
             listSeparator = "<br>";
-          
+
           // Reset for list item separation into cells
           listItemSeparator = "";
         }
         else if (/^li|^dt|^dd/.test(tagContent))
         {
           // Start a new row if this is first item after the ending the last list
           if (endList)
             listItemSeparator = "<br>";
@@ -160,65 +160,65 @@ function onAccept()
           // Start new cell at beginning of second or greater list items
           str = str.slice(0, start) + listItemSeparator + str.slice(end+1);
 
           if (endList || listItemSeparator == "")
             listItemSeparator = sepCharacter;
 
           endList = false;
         }
-        else 
+        else
         {
           // Find end tags
           endList = /^\/ol|^\/ul|^\/dl/.test(tagContent);
           if (endList || /^\/li|^\/dt|^\/dd/.test(tagContent))
           {
             // Strip out tag
             str = str.slice(0, start) + str.slice(end+1);
           }
           else
           {
             // Not a list-related tag: Store tag contents in an array
             stack.push(tagContent);
-           
+
             // Keep the "<" and ">" while removing from source string
             start++;
             str = str.slice(0, start) + str.slice(end);
           }
         }
       }
       searchStart = start + 1;
     }
   } while (start >= 0);
 
   // Replace separator characters with table cells
   var replaceString;
   if (gDialog.deleteSepCharacter.checked)
   {
     replaceString = "";
-  }  
+  }
   else
   {
     // Don't delete separator character,
     //  so include it at start of string to replace
     replaceString = sepCharacter;
   }
 
-  replaceString += "<td>"; 
+  replaceString += "<td>";
 
   if (sepCharacter.length > 0)
   {
     var tempStr = sepCharacter;
     var regExpChars = ".!@#$%^&*-+[]{}()\|\\\/";
     if (regExpChars.includes(sepCharacter))
       tempStr = "\\" + sepCharacter;
 
     if (gIndex == gSpaceIndex)
     {
-      // If checkbox is checked, 
+      // If checkbox is checked,
       //   one or more adjacent spaces are one separator
       if (gDialog.collapseSpaces.checked)
           tempStr = "\\s+"
         else
           tempStr = "\\s";
     }
     var pattern = new RegExp(tempStr, "g");
     str = str.replace(pattern, replaceString);
@@ -243,40 +243,40 @@ function onAccept()
   str = str.replace(/\s*<br>\s*/g, "</tr>\n<tr><td>");
 
   // Add the table tags and the opening and closing tr/td tags
   // Default table attributes should be same as those used in nsHTMLEditor::CreateElementWithDefaults()
   // (Default width="100%" is used in EdInsertTable.js)
   str = "<table border=\"1\" width=\"100%\" cellpadding=\"2\" cellspacing=\"2\">\n<tr><td>" + str + "</tr>\n</table>\n";
 
   editor.beginTransaction();
-  
+
   // Delete the selection -- makes it easier to find where table will insert
   var nodeBeforeTable = null;
   var nodeAfterTable = null;
   try {
     editor.deleteSelection(editor.eNone, editor.eStrip);
 
     var anchorNodeBeforeInsert = editor.selection.anchorNode;
     var offset = editor.selection.anchorOffset;
     if (anchorNodeBeforeInsert.nodeType == Node.TEXT_NODE)
     {
-      // Text was split. Table should be right after the first or before 
+      // Text was split. Table should be right after the first or before
       nodeBeforeTable = anchorNodeBeforeInsert.previousSibling;
       nodeAfterTable = anchorNodeBeforeInsert;
     }
     else
     {
       // Table should be inserted right after node pointed to by selection
       if (offset > 0)
         nodeBeforeTable = anchorNodeBeforeInsert.childNodes.item(offset - 1);
 
       nodeAfterTable = anchorNodeBeforeInsert.childNodes.item(offset);
     }
-  
+
     editor.insertHTML(str);
   } catch (e) {}
 
   var table = null;
   if (nodeAfterTable)
   {
     var previous = nodeAfterTable.previousSibling;
     if (previous && previous.nodeName.toLowerCase() == "table")
@@ -303,17 +303,17 @@ function onAccept()
     // Put caret in first cell
     if (firstRow)
     {
       var node2 = firstRow.firstChild;
       do {
         if (node2.nodeName.toLowerCase() == "td" ||
             node2.nodeName.toLowerCase() == "th")
         {
-          try { 
+          try {
             editor.selection.collapse(node2, 0);
           } catch(e) {}
           break;
         }
         node2 = node.nextSibling;
       } while (node2);
     }
   }
--- a/editor/ui/dialogs/content/EdConvertToTable.xul
+++ b/editor/ui/dialogs/content/EdConvertToTable.xul
@@ -2,17 +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://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EdConvertToTable.dtd">
 
 <dialog title="&windowTitle.label;"
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    onload = "Startup()"
    ondialogaccept="return onAccept();"
    ondialogcancel="return onCancel();"
@@ -35,13 +35,13 @@
       <checkbox id="CollapseSpaces" label="&collapseSpaces.label;"
                 checked="true" persist="checked"
                 tooltiptext="&collapseSpaces.tooltip;"/>
     </hbox>
     <hbox align="center">
       <radio id="other" label="&otherRadio.label;" oncommand="SelectCharacter('2');"/>
       <textbox class="narrow" id="SepCharacterInput" oninput="InputSepCharacter()"/>
     </hbox>
-  </radiogroup> 
+  </radiogroup>
   <spacer class="spacer"/>
   <checkbox id="DeleteSepCharacter" label="&deleteCharCheck.label;" persist="checked"/>
   <separator class="groove"/>
 </dialog>
--- a/editor/ui/dialogs/content/EdDialogCommon.js
+++ b/editor/ui/dialogs/content/EdDialogCommon.js
@@ -25,31 +25,31 @@ var SeeMore = false;
 
 // A XUL element with id="location" for managing
 // dialog location relative to parent window
 var gLocation;
 
 // The element being edited - so AdvancedEdit can have access to it
 var globalElement;
 
-/* Validate contents of an input field 
+/* Validate contents of an input field
  *
  *  inputWidget    The 'textbox' XUL element for text input of the attribute's value
  *  listWidget     The 'menulist' XUL element for choosing "pixel" or "percent"
  *                  May be null when no pixel/percent is used.
  *  minVal         minimum allowed for input widget's value
  *  maxVal         maximum allowed for input widget's value
  *                 (when "listWidget" is used, maxVal is used for "pixel" maximum,
  *                  100% is assumed if "percent" is the user's choice)
  *  element        The DOM element that we set the attribute on. May be null.
  *  attName        Name of the attribute to set.  May be null or ignored if "element" is null
  *  mustHaveValue  If true, error dialog is displayed if "value" is empty string
  *
- *  This calls "ValidateNumberRange()", which puts up an error dialog to inform the user. 
- *    If error, we also: 
+ *  This calls "ValidateNumberRange()", which puts up an error dialog to inform the user.
+ *    If error, we also:
  *      Shift focus and select contents of the inputWidget,
  *      Switch to appropriate panel of tabbed dialog if user implements "SwitchToValidate()",
  *      and/or will expand the dialog to full size if "More / Fewer" feature is implemented
  *
  *  Returns the "value" as a string, or "" if error or input contents are empty
  *  The global "gValidationError" variable is set true if error was found
  */
 function ValidateNumber(inputWidget, listWidget, minVal, maxVal, element, attName, mustHaveValue, mustShowMoreSection)
@@ -76,17 +76,17 @@ function ValidateNumber(inputWidget, lis
     // This method puts up the error message
     numString = ValidateNumberRange(numString, minVal, maxLimit, mustHaveValue);
     if(!numString)
     {
       // Switch to appropriate panel for error reporting
       SwitchToValidatePanel();
 
       // or expand dialog for users of "More / Fewer" button
-      if ("dialog" in window && dialog && 
+      if ("dialog" in window && dialog &&
            "MoreSection" in gDialog && gDialog.MoreSection)
       {
         if ( !SeeMore )
           onMoreFewer();
       }
 
       // Error - shift to offending input widget
       SetTextboxFocus(inputWidget);
@@ -100,17 +100,17 @@ function ValidateNumber(inputWidget, lis
         GetCurrentEditor().setAttributeOrEquivalent(element, attName, numString, true);
     }
   } else if (element) {
     GetCurrentEditor().removeAttributeOrEquivalent(element, attName, true)
   }
   return numString;
 }
 
-/* Validate contents of an input field 
+/* Validate contents of an input field
  *
  *  value          number to validate
  *  minVal         minimum allowed for input widget's value
  *  maxVal         maximum allowed for input widget's value
  *                 (when "listWidget" is used, maxVal is used for "pixel" maximum,
  *                  100% is assumed if "percent" is the user's choice)
  *  mustHaveValue  If true, error dialog is displayed if "value" is empty string
  *
@@ -417,17 +417,17 @@ function GetLocalFileURL(filterType)
       fp.appendFilters(nsIFilePicker.filterImages);
 
   }
   // Default or last filter is "All Files"
   fp.appendFilters(nsIFilePicker.filterAll);
 
   // set the file picker's current directory to last-opened location saved in prefs
   SetFilePickerDirectory(fp, fileType);
-  
+
   return new Promise(resolve => {
     fp.open(rv => {
       if (rv != nsIFilePicker.returnOK || !fp.file) {
         resolve(null);
         return;
       }
       SaveFilePickerDirectory(fp, fileType);
       resolve(fp.fileURL.spec);
@@ -614,17 +614,17 @@ function SetRelativeCheckbox(checkbox)
       //  but we don't want to allow a malformed URL)
       if (url[0] == "#")
       {
         var docFilename = GetFilename(docUrl);
         enable = docFilename.length > 0;
       }
       else
       {
-        // Any other url is assumed 
+        // Any other url is assumed
         //  to be ok to try to make absolute
         enable = true;
       }
     }
   }
 
   SetElementEnabled(checkbox, enable);
 }
@@ -639,17 +639,17 @@ function MakeInputValueRelativeOrAbsolut
   var docUrl = GetDocumentBaseUrl();
   if (!docUrl)
   {
     // Checkbox should be disabled if not saved,
     //  but keep this error message in case we change that
     Services.prompt.alert(window, "", GetString("SaveToUseRelativeUrl"));
     window.focus();
   }
-  else 
+  else
   {
     // Note that "checked" is opposite of its last state,
     //  which determines what we want to do here
     if (checkbox.checked)
       input.value = MakeRelativeUrl(input.value);
     else
       input.value = MakeAbsoluteUrl(input.value);
 
@@ -906,17 +906,17 @@ function FillLinkMenulist(linkMenulist, 
       {
         anchor = '#' + element.name;
         if (!(anchor in anchorMap))
         {
           anchorList.push({anchor: anchor, sortkey: anchor.toLowerCase()});
           anchorMap[anchor] = true;
         }
       }
-      
+
       // grab IDs
       if (element.id)
       {
         anchor = '#' + element.id;
         if (!(anchor in anchorMap))
         {
           anchorList.push({anchor: anchor, sortkey: anchor.toLowerCase()});
           anchorMap[anchor] = true;
--- a/editor/ui/dialogs/content/EdDialogTemplate.js
+++ b/editor/ui/dialogs/content/EdDialogTemplate.js
@@ -15,30 +15,30 @@ function Startup()
     window.close();
     return;
   }
   // gDialog is declared in EdDialogCommon.js
   // Set commonly-used widgets like this:
   gDialog.fooButton = document.getElementById("fooButton");
 
   initDialog();
-  
+
   // Set window location relative to parent window (based on persisted attributes)
   SetWindowLocation();
 
   // Set focus to first widget in dialog, e.g.:
   SetTextboxFocus(gDialog.fooButton);
 }
 
-function InitDialog() 
+function InitDialog()
 {
   // Initialize all dialog widgets here,
   // e.g., get attributes from an element for property dialog
 }
 
 function onAccept()
 {
   // Validate all user data and set attributes and possibly insert new element here
   // If there's an error the user must correct, return false to keep dialog open.
-  
+
   SaveWindowLocation();
   return true; // do close the window
 }
--- a/editor/ui/dialogs/content/EdDialogTemplate.xul
+++ b/editor/ui/dialogs/content/EdDialogTemplate.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/Ed?????????.dtd">
 <!-- dialog containing a control requiring initial setup -->
 <dialog title="&windowTitle.label;"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     onload="Startup()"
     ondialogaccept="return onAccept();"
     ondialogcancel="return onCancel();">
--- a/editor/ui/dialogs/content/EdDictionary.js
+++ b/editor/ui/dialogs/content/EdDictionary.js
@@ -20,20 +20,20 @@ function Startup()
   if (!gSpellChecker)
   {
     dump("SpellChecker not found!!!\n");
     window.close();
     return;
   }
   // The word to add word is passed as the 2nd extra parameter in window.openDialog()
   gWordToAdd = window.arguments[1];
-  
+
   gDialog.WordInput = document.getElementById("WordInput");
   gDialog.DictionaryList = document.getElementById("DictionaryList");
-  
+
   gDialog.WordInput.value = gWordToAdd;
   FillDictionaryList();
 
   // Select the supplied word if it is already in the list
   SelectWordToAddInList();
   SetTextboxFocus(gDialog.WordInput);
 }
 
@@ -41,17 +41,17 @@ function ValidateWordToAdd()
 {
   gWordToAdd = TrimString(gDialog.WordInput.value);
   if (gWordToAdd.length > 0)
   {
     return true;
   } else {
     return false;
   }
-}    
+}
 
 function SelectWordToAddInList()
 {
   for (var i = 0; i < gDialog.DictionaryList.getRowCount(); i++)
   {
 
     var wordInList = gDialog.DictionaryList.getItemAtIndex(i);
     if (wordInList && gWordToAdd == wordInList.label)
@@ -93,17 +93,17 @@ function ReplaceWord()
       } catch (e) {}
 
       try {
         // Add to the dictionary list
         gSpellChecker.AddWordToDictionary(gWordToAdd);
 
         // Just change the text on the selected item
         //  instead of rebuilding the list
-        selItem.label = gWordToAdd; 
+        selItem.label = gWordToAdd;
       } catch (e) {
         // Rebuild list and select the word - it was probably already in the list
         dump("Exception occurred adding word in ReplaceWord\n");
         FillDictionaryList();
         SelectWordToAddInList();
       }
     }
   }
@@ -149,32 +149,32 @@ function FillDictionaryList()
   do {
     var word = gSpellChecker.GetPersonalDictionaryWord();
     if (word != "")
     {
       gDialog.DictionaryList.appendItem(word, "");
       haveList = true;
     }
   } while (word != "");
-  
+
   //XXX: BUG 74467: If list is empty, it doesn't layout to full height correctly
   //     (ignores "rows" attribute) (bug is latered, so we are fixing here for now)
   if (!haveList)
       gDialog.DictionaryList.appendItem("", "");
 
   ResetSelectedItem(selIndex);
 }
 
 function ResetSelectedItem(index)
 {
   var lastIndex = gDialog.DictionaryList.getRowCount() - 1;
   if (index > lastIndex)
     index = lastIndex;
 
-  // If we didn't have a selected item, 
+  // If we didn't have a selected item,
   //  set it to the first item
   if (index == -1 && lastIndex >= 0)
     index = 0;
 
   gDialog.DictionaryList.selectedIndex = index;
 }
 
 function onClose()
--- a/editor/ui/dialogs/content/EdDictionary.xul
+++ b/editor/ui/dialogs/content/EdDictionary.xul
@@ -11,17 +11,17 @@
     persist="screenX screenY"
     onload = "Startup()"
     ondialogcancel="return onClose();">
 
   <!-- Methods common to all editor dialogs -->
   <script type="application/javascript" src="chrome://editor/content/editorUtilities.js"/>
   <script type="application/javascript" src="chrome://editor/content/EdDialogCommon.js"/>
   <script type="application/javascript" src="chrome://editor/content/EdDictionary.js"/>
-  
+
   <broadcaster id="args" value=""/>
   <grid>
     <columns><column style="width: 15em" flex="1"/><column flex="1"/></columns>
     <rows>
       <row>
         <label value="&wordEditField.label;"
                control="WordInput"
                accesskey="&wordEditField.accessKey;"/>
@@ -43,16 +43,16 @@
         <vbox flex="1">
           <button  id="ReplaceWord" oncommand="ReplaceWord()" label="&ReplaceButton.label;"
                    accesskey="&ReplaceButton.accessKey;"/>
           <spacer class="spacer"/>
           <button  id="RemoveWord" oncommand="RemoveWord()" label="&RemoveButton.label;"
                    accesskey="&RemoveButton.accessKey;"/>
           <spacer class="spacer"/>
           <spacer flex="1"/>
-          <button dlgtype="cancel" class="exit-dialog" id="close" label="&CloseButton.label;" 
+          <button dlgtype="cancel" class="exit-dialog" id="close" label="&CloseButton.label;"
                   default="true" oncommand="onClose();"
                   accesskey="&CloseButton.accessKey;"/>
         </vbox>
       </row>
     </rows>
   </grid>
 </dialog>
--- a/editor/ui/dialogs/content/EdFieldSetProps.js
+++ b/editor/ui/dialogs/content/EdFieldSetProps.js
@@ -138,17 +138,17 @@ function onAccept()
   ValidateData();
 
   var editor = GetCurrentEditor();
 
   editor.beginTransaction();
 
   try {
     editor.cloneAttributes(legendElement, globalElement);
- 
+
     if (insertNew)
     {
       if (gDialog.legendText.value)
       {
         fieldsetElement.appendChild(legendElement);
         legendElement.appendChild(editor.document.createTextNode(gDialog.legendText.value));
       }
       InsertElementAroundSelection(fieldsetElement);
--- a/editor/ui/dialogs/content/EdFieldSetProps.xul
+++ b/editor/ui/dialogs/content/EdFieldSetProps.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorFieldSetProperties.dtd">
 <dialog title="&windowTitle.label;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup();"
         buttons="accept,cancel"
         ondialogaccept="return onAccept();"
         ondialogcancel="return onCancel();">
--- a/editor/ui/dialogs/content/EdFormProps.xul
+++ b/editor/ui/dialogs/content/EdFormProps.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorFormProperties.dtd">
 <dialog title="&windowTitle.label;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup();"
         buttons="accept,cancel"
         ondialogaccept="return onAccept();"
         ondialogcancel="return onCancel();">
--- a/editor/ui/dialogs/content/EdHLineProps.js
+++ b/editor/ui/dialogs/content/EdHLineProps.js
@@ -147,17 +147,17 @@ function onSaveDefault()
 function ValidateData()
 {
   // Height is always pixels
   height = ValidateNumber(gDialog.heightInput, null, 1, gMaxHRSize,
                           globalElement, "size", false);
   if (gValidationError)
     return false;
 
-  width = ValidateNumber(gDialog.widthInput, gDialog.pixelOrPercentMenulist, 1, gMaxPixels, 
+  width = ValidateNumber(gDialog.widthInput, gDialog.pixelOrPercentMenulist, 1, gMaxPixels,
                          globalElement, "width", false);
   if (gValidationError)
     return false;
 
   align = "left";
   if (gDialog.centerAlign.selected) {
     // Don't write out default attribute
     align = "";
--- a/editor/ui/dialogs/content/EdImageOverlay.xul
+++ b/editor/ui/dialogs/content/EdImageOverlay.xul
@@ -11,75 +11,75 @@
   <script type="application/javascript" src="chrome://editor/content/EdImageOverlay.js"/>
 
   <tab id="imageInputTab" label="&imageInputTab.label;"/>
   <tab id="imageLocationTab" label="&imageLocationTab.label;"/>
   <tab id="imageDimensionsTab" label="&imageDimensionsTab.label;"/>
   <tab id="imageAppearanceTab" label="&imageAppearanceTab.label;"/>
   <tab id="imageLinkTab" label="&imageLinkTab.label;"/>
 
-  <vbox id="imageLocation"> 
+  <vbox id="imageLocation">
     <spacer class="spacer"/>
     <label control = "srcInput"
       value = "&locationEditField.label;"
       accesskey="&locationEditField.accessKey;"
       tooltiptext="&locationEditField.tooltip;"
       />
     <tooltip id="shortenedDataURI">
       <label value="&locationEditField.shortenedDataURI;"/>
     </tooltip>
     <textbox id="srcInput" oninput="ChangeImageSrc();" tabindex="1" class="uri-element"
              tooltiptext="&locationEditField.tooltip;"/>
     <hbox id="MakeRelativeHbox">
-      <checkbox 
+      <checkbox
         id  = "MakeRelativeCheckbox"
         for = "srcInput"
         tabindex="2"/>
       <!-- mail compose will insert custom item here defined in mailComposeEditorOverlay.xul -->
       <spacer flex="1"/>
       <!-- from EdDialogOverlay.xul -->
       <button id="ChooseFile"  tabindex="3"/>
     </hbox>
     <spacer class="spacer"/>
     <radiogroup id="altTextRadioGroup" flex="1">
       <grid>
         <columns><column/><column flex="1"/></columns>
         <rows>
           <row align="center">
-            <label 
+            <label
               style   = "margin-left: 26px"
               control = "titleInput"
               accesskey = "&title.accessKey;"
               value   ="&title.label;"
               tooltiptext="&title.tooltip;"
               for     = "titleInput"/>
             <textbox flex="1"
               id      = "titleInput"
               class   = "MinWidth20em"
               tooltiptext="&title.tooltip;"
               tabindex="4"/>
           </row>
           <row align="center">
-            <radio id = "altTextRadio" 
+            <radio id = "altTextRadio"
               label   = "&altText.label;"
               accesskey = "&altText.accessKey;"
               tooltiptext="&altTextEditField.tooltip;"
               oncommand = "SetAltTextDisabled(false);"
               tabindex="5"/>
             <textbox flex="1"
               id      = "altTextInput"
               class   = "MinWidth20em"
               tooltiptext="&altTextEditField.tooltip;"
               oninput = "SetAltTextDisabled(false);"
               tabindex="6"/>
           </row>
         </rows>
       </grid>
 
-      <radio id = "noAltTextRadio" 
+      <radio id = "noAltTextRadio"
         label   = "&noAltText.label;"
         accesskey = "&noAltText.accessKey;"
         oncommand = "SetAltTextDisabled(true);"/>
     </radiogroup>
   </vbox>
 
   <groupbox id="imagePreview" orient="horizontal" flex="1">
     <caption label="&previewBox.label;"/>
@@ -105,23 +105,23 @@
     </vbox>
   </groupbox>
 
   <vbox id="imageDimensions" align="start">
     <spacer class="spacer"/>
     <hbox>
       <radiogroup id="imgSizeGroup">
         <radio
-          id      = "actualSizeRadio" 
+          id      = "actualSizeRadio"
           label   = "&actualSizeRadio.label;"
           accesskey = "&actualSizeRadio.accessKey;"
           tooltiptext="&actualSizeRadio.tooltip;"
           oncommand = "SetActualSize()"/>
         <radio
-          id      = "customSizeRadio" 
+          id      = "customSizeRadio"
           label   = "&customSizeRadio.label;"
           selected = "true"
           accesskey = "&customSizeRadio.accessKey;"
           tooltiptext="&customSizeRadio.tooltip;"
           oncommand = "doDimensionEnabling();" />
       </radiogroup>
       <spacer flex="1"/>
       <vbox>
@@ -138,90 +138,90 @@
       <columns><column/><column/><column flex="1"/></columns>
       <rows>
         <row align="center">
           <label id    = "widthLabel"
             control   = "widthInput"
             accesskey = "&widthEditField.accessKey;"
             value = "&widthEditField.label;" />
           <textbox
-            id       = "widthInput" 
+            id       = "widthInput"
             class    = "narrow"
             oninput  = "constrainProportions(this.id, 'heightInput')"/>
           <menulist id = "widthUnitsMenulist"
             oncommand = "doDimensionEnabling();" />
           <!-- contents are appended by JS -->
         </row>
         <row align="center">
           <label id    = "heightLabel"
             control   = "heightInput"
             accesskey = "&heightEditField.accessKey;"
             value = "&heightEditField.label;" />
           <textbox
-            id       = "heightInput" 
+            id       = "heightInput"
             class    = "narrow"
             oninput  = "constrainProportions(this.id, 'widthInput')"/>
           <menulist id = "heightUnitsMenulist"
             oncommand = "doDimensionEnabling();" />
           <!-- contents are appended by JS -->
         </row>
-      </rows>          
+      </rows>
     </grid>
     <spacer flex="1"/>
   </vbox>
 
   <hbox id="imageAppearance">
     <groupbox>
       <caption id="spacingLabel" label="&spacingBox.label;"/>
       <grid>
         <columns><column/><column/><column/></columns>
         <rows>
           <row align="center">
-            <label 
-              class = "align-right" 
+            <label
+              class = "align-right"
               id    = "leftrightLabel"
               control = "imageleftrightInput"
               accesskey = "&leftRightEditField.accessKey;"
               value = "&leftRightEditField.label;"/>
             <textbox
               class     = "narrow"
-              id        = "imageleftrightInput" 
+              id        = "imageleftrightInput"
               oninput   = "forceInteger(this.id)"/>
-            <label 
+            <label
               id    = "leftrighttypeLabel"
               value = "&pixelsPopup.value;" />
           </row>
           <spacer class="spacer"/>
           <row align="center">
-            <label 
-              class = "align-right" 
+            <label
+              class = "align-right"
               id    = "topbottomLabel"
               control = "imagetopbottomInput"
               accesskey = "&topBottomEditField.accessKey;"
               value = "&topBottomEditField.label;"/>
             <textbox
               class     = "narrow"
-              id        = "imagetopbottomInput" 
+              id        = "imagetopbottomInput"
               oninput   = "forceInteger(this.id)"/>
             <label
               id    = "topbottomtypeLabel"
               value = "&pixelsPopup.value;" />
           </row>
           <spacer class="spacer"/>
           <row align="center">
-            <label class = "align-right" 
+            <label class = "align-right"
               id    = "borderLabel"
               control = "border"
               accesskey = "&borderEditField.accessKey;"
               value = "&borderEditField.label;"/>
             <textbox
               class     = "narrow"
-              id        = "border" 
+              id        = "border"
               oninput   = "forceInteger(this.id)"/>
-            <label 
+            <label
               id    = "bordertypeLabel"
               value = "&pixelsPopup.value;" />
           </row>
         </rows>
       </grid>
     </groupbox>
 
     <vbox>
--- a/editor/ui/dialogs/content/EdInputImage.xul
+++ b/editor/ui/dialogs/content/EdInputImage.xul
@@ -1,18 +1,18 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdImageOverlay.xul"?> 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdImageOverlay.xul"?>
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorInputProperties.dtd">
 <dialog title="&windowTitleImage.label;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup();"
         ondialogaccept="return onAccept();"
         ondialogcancel="return onCancel();">
 
--- a/editor/ui/dialogs/content/EdInputProps.xul
+++ b/editor/ui/dialogs/content/EdInputProps.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorInputProperties.dtd">
 <dialog title="&windowTitle.label;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup();"
         buttons="accept,cancel"
         ondialogaccept="return onAccept();"
         ondialogcancel="return onCancel();">
--- a/editor/ui/dialogs/content/EdInsSrc.xul
+++ b/editor/ui/dialogs/content/EdInsSrc.xul
@@ -2,17 +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://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorInsertSource.dtd">
 
 <dialog title="&windowTitle.label;"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     onload = "Startup()"
     buttonlabelaccept="&insertButton.label;"
     buttonaccesskeyaccept="&insertButton.accesskey;"
--- a/editor/ui/dialogs/content/EdInsertChars.js
+++ b/editor/ui/dialogs/content/EdInsertChars.js
@@ -40,17 +40,17 @@ function onAccept()
     GetCurrentEditor().insertText(LatinM.label);
   } catch(e) {}
 
   // Set persistent attributes to save
   //  which category, letter, and character modifier was used
   CategoryGroup.setAttribute("category", category);
   CategoryGroup.setAttribute("letter_index", indexL);
   CategoryGroup.setAttribute("char_index", indexM);
-  
+
   // Don't close the dialog
   return false;
 }
 
 // Don't allow inserting in HTML Source Mode
 function onFocus()
 {
   var enable = true;
--- a/editor/ui/dialogs/content/EdInsertChars.xul
+++ b/editor/ui/dialogs/content/EdInsertChars.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorInsertChars.dtd">
 
 <dialog id="insertCharsDlg" title="&windowTitle.label;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload = "Startup()"
         onfocus = "onFocus()"
         buttonlabelaccept="&insertButton.label;"
@@ -30,17 +30,17 @@
 
   <groupbox><caption label="&category.label;"/>
     <radiogroup id="CatGrp" persist="category letter_index char_index">
       <radio id="AccentUpper" label="&accentUpper.label;"   oncommand="ChangeCategory(this.id)"/>
       <radio id="AccentLower" label="&accentLower.label;"   oncommand="ChangeCategory(this.id)"/>
       <radio id="Upper"       label="&otherUpper.label;"    oncommand="ChangeCategory(this.id)"/>
       <radio id="Lower"       label="&otherLower.label;"    oncommand="ChangeCategory(this.id)"/>
       <radio id="Symbol"      label="&commonSymbols.label;" oncommand="ChangeCategory(this.id)"/>
-    </radiogroup> 
+    </radiogroup>
     <spacer class="spacer"/>
   </groupbox>
   <hbox equalsize="always">
     <vbox flex="1">
       <!-- value is set in JS from editor.properties strings -->
       <label id="LatinL_Label" control="LatinL" value="&letter.label;" accesskey="&letter.accessKey;"/>
       <menulist class="larger" flex="1" id="LatinL" oncommand="SelectLatinLetter()">
         <menupopup/>
--- a/editor/ui/dialogs/content/EdInsertMath.xul
+++ b/editor/ui/dialogs/content/EdInsertMath.xul
@@ -2,17 +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://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorInsertMath.dtd">
 
 <dialog title="&windowTitle.label;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup();"
         buttonlabelaccept="&insertButton.label;"
         buttonaccesskeyaccept="&insertButton.accesskey;"
--- a/editor/ui/dialogs/content/EdInsertTOC.js
+++ b/editor/ui/dialogs/content/EdInsertTOC.js
@@ -257,17 +257,17 @@ function BuildTOC(update)
           toc.parentNode.insertBefore(newToc, toc);
           // and remove the old one
           toc.remove();
           toc = newToc;
           toc.setAttribute("id", kMozToc);
         }
         else {
           // we can keep the list itself but let's get rid of the TOC entries
-          while (toc.hasChildNodes()) 
+          while (toc.hasChildNodes())
             toc.lastChild.remove();
         }
       }
       var commentText = "mozToc ";
       for (var j = 0; j < 6; j++) {
         if (tocHeadersArray[j][0] != "") {
           commentText += tocHeadersArray[j][0];
           if (tocHeadersArray[j][1] != "") {
--- a/editor/ui/dialogs/content/EdInsertTable.js
+++ b/editor/ui/dialogs/content/EdInsertTable.js
@@ -49,17 +49,17 @@ function Startup()
   } catch (e) {}
 
   // Initialize all widgets with image attributes
   InitDialog();
 
   // Set initial number to 2 rows, 2 columns:
   // Note, these are not attributes on the table,
   //  so don't put them in InitDialog(),
-  //  else the user's values will be trashed when they use 
+  //  else the user's values will be trashed when they use
   //  the Advanced Edit dialog
   gDialog.rowsInput.value = 2;
   gDialog.columnsInput.value = 2;
 
   // If no default value on the width, set to 100%
   if (gDialog.widthInput.value.length == 0)
   {
     gDialog.widthInput.value = "100";
@@ -70,32 +70,32 @@ function Startup()
 
   SetWindowLocation();
 }
 
 // Set dialog widgets with attribute data
 // We get them from globalElement copy so this can be used
 //   by AdvancedEdit(), which is shared by all property dialogs
 function InitDialog()
-{  
+{
   // Get default attributes set on the created table:
   // Get the width attribute of the element, stripping out "%"
   // This sets contents of menu combobox list
   // 2nd param = null: Use current selection to find if parent is table cell or window
   gDialog.widthInput.value = InitPixelOrPercentMenulist(globalElement, null, "width", "widthPixelOrPercentMenulist", gPercent);
   gDialog.borderInput.value = globalElement.getAttribute("border");
 }
 
 function ChangeRowOrColumn(id)
 {
   // Allow only integers
   forceInteger(id);
 
   // Enable OK only if both rows and columns have a value > 0
-  var enable = gDialog.rowsInput.value.length > 0 && 
+  var enable = gDialog.rowsInput.value.length > 0 &&
                               gDialog.rowsInput.value > 0 &&
                               gDialog.columnsInput.value.length > 0 &&
                               gDialog.columnsInput.value > 0;
 
   SetElementEnabled(gDialog.OkButton, enable);
   SetElementEnabledById("AdvancedEditButton1", enable);
 }
 
@@ -175,29 +175,29 @@ function onAccept()
         if (countObj.value >= 1)
         {
           if (countObj.value > 1)
           {
             // Assume user wants to replace a block of
             //  contiguous cells with a table, so
             //  join the selected cells
             gActiveEditor.joinTableCells(false);
-          
+
             // Get the cell everything was merged into
             element = gActiveEditor.getFirstSelectedCell();
-          
+
             // Collapse selection into just that cell
             gActiveEditor.selection.collapse(element,0);
           }
 
           if (element)
           {
             // Empty just the contents of the cell
             gActiveEditor.deleteTableCellContents();
-          
+
             // Collapse selection to start of empty cell...
             gActiveEditor.selection.collapse(element,0);
             // ...but it will contain a <br> placeholder
             deletePlaceholder = true;
           }
         }
       }
 
--- a/editor/ui/dialogs/content/EdInsertTable.xul
+++ b/editor/ui/dialogs/content/EdInsertTable.xul
@@ -2,17 +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://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorInsertTable.dtd">
 
 <dialog title="&windowTitle.label;"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     onload = "Startup()"
     ondialogaccept="return onAccept();"
     ondialogcancel="return onCancel();">
@@ -60,13 +60,13 @@
   </groupbox>
   <spacer class="spacer"/>
   <hbox align="center">
     <label control="borderInput" class="align-right"
         value="&borderEditField.label;"
         accesskey="&borderEditField.accessKey;"
         tooltiptext="&borderEditField.tooltip;" />
     <textbox class="narrow" id="borderInput" oninput="forceInteger(this.id)" />
-    <label value="&pixels.label;"/>  
+    <label value="&pixels.label;"/>
   </hbox>
   <!-- from EdDialogOverlay -->
   <vbox id="AdvancedEdit"/>
 </dialog>
--- a/editor/ui/dialogs/content/EdLabelProps.xul
+++ b/editor/ui/dialogs/content/EdLabelProps.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorLabelProperties.dtd">
 <dialog title="&windowTitle.label;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup();"
         buttons="accept,cancel"
         ondialogaccept="return onAccept();"
         ondialogcancel="return onCancel();">
--- a/editor/ui/dialogs/content/EdLinkChecker.js
+++ b/editor/ui/dialogs/content/EdLinkChecker.js
@@ -148,18 +148,18 @@ function LinkCheckTimeOut()
 function SetItemStatus(url, status)
 {
   if (!url)
     return false;
 
   if (!status)
     status = "busy";
 
-  // Just set attribute for status icon 
-  // if we already have this url 
+  // Just set attribute for status icon
+  // if we already have this url
   let listitem = document.querySelector('listitem[label="' + url + '"]');
   if (listitem)
   {
     listitem.setAttribute("progress", status);
     return true;
   }
 
   // We're adding a new item to list
--- a/editor/ui/dialogs/content/EdLinkChecker.xul
+++ b/editor/ui/dialogs/content/EdLinkChecker.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EdLinkChecker.dtd">
 <!-- dialog containing a control requiring initial setup -->
 <dialog title="&windowTitle.label;"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     onload="Startup()"
     buttonlabelcancel="&closeButton.label;"
     ondialogaccept="return onAccept();"
--- a/editor/ui/dialogs/content/EdLinkProps.js
+++ b/editor/ui/dialogs/content/EdLinkProps.js
@@ -72,17 +72,17 @@ function Startup()
       gActiveEditor.selectElement(anchorElement);
     }
     else
     {
       // If selection starts in a link, but extends beyond it,
       //   the user probably wants to extend existing link to new selection,
       //   so check if either end of selection is within a link
       // POTENTIAL PROBLEM: This prevents user from selecting text in an existing
-      //   link and making 2 links. 
+      //   link and making 2 links.
       // Note that this isn't a problem with images, handled above
 
       anchorElement = gActiveEditor.getElementOrParentByTagName("href", gActiveEditor.selection.anchorNode);
       if (!anchorElement)
         anchorElement = gActiveEditor.getElementOrParentByTagName("href", gActiveEditor.selection.focusNode);
 
       if (anchorElement)
       {
@@ -103,21 +103,21 @@ function Startup()
     // Hide message about removing existing link
     //document.getElementById("RemoveLinkMsg").hidden = true;
   }
   if(!anchorElement)
   {
     dump("Failed to get selected element or create a new one!\n");
     window.close();
     return;
-  } 
+  }
 
   // We insert at caret only when nothing is selected
   insertLinkAtCaret = gActiveEditor.selection.isCollapsed;
-  
+
   var selectedText;
   if (insertLinkAtCaret)
   {
     // Groupbox caption:
     gDialog.linkTextCaption.setAttribute("label", GetString("LinkText"));
 
     // Message above input field:
     gDialog.linkTextMessage.setAttribute("value", GetString("EnterLinkText"));
@@ -125,23 +125,23 @@ function Startup()
   }
   else
   {
     if (!imageElement)
     {
       // We get here if selection is exactly around a link node
       // Check if selection has some text - use that first
       selectedText = GetSelectionAsText();
-      if (!selectedText) 
+      if (!selectedText)
       {
         // No text, look for first image in the selection
         var children = anchorElement.childNodes;
         if (children)
         {
-          for(var i=0; i < children.length; i++) 
+          for(var i=0; i < children.length; i++)
           {
             var nodeName = children.item(i).nodeName.toLowerCase();
             if (nodeName == "img")
             {
               imageElement = children.item(i);
               break;
             }
           }
@@ -152,17 +152,17 @@ function Startup()
     if (imageElement)
     {
       gDialog.linkTextCaption.setAttribute("label", GetString("LinkImage"));
       // Link source string is the source URL of image
       // TODO: THIS DOESN'T HANDLE MULTIPLE SELECTED IMAGES!
       gDialog.linkTextMessage.setAttribute("value", imageElement.src);
     } else {
       gDialog.linkTextCaption.setAttribute("label", GetString("LinkText"));
-      if (selectedText) 
+      if (selectedText)
       {
         // Use just the first 60 characters and add "..."
         gDialog.linkTextMessage.setAttribute("value", TruncateStringAtWordEnd(ReplaceWhitespace(selectedText, " "), 60, true));
       } else {
         gDialog.linkTextMessage.setAttribute("value", GetString("MixedSelection"));
       }
     }
   }
@@ -173,59 +173,59 @@ function Startup()
   // Get the list of existing named anchors and headings
   FillLinkMenulist(gDialog.hrefInput, gHNodeArray);
 
   // We only need to test for this once per dialog load
   gHaveDocumentUrl = GetDocumentBaseUrl();
 
   // Set data for the dialog controls
   InitDialog();
-  
+
   // Search for a URI pattern in the selected text
   //  as candidate href
-  selectedText = TrimString(selectedText); 
+  selectedText = TrimString(selectedText);
   if (!gDialog.hrefInput.value && TextIsURI(selectedText))
       gDialog.hrefInput.value = selectedText;
 
   // Set initial focus
   if (insertLinkAtCaret) {
     // We will be using the HREF inputbox, so text message
     SetTextboxFocus(gDialog.linkTextInput);
   } else {
     SetTextboxFocus(gDialog.hrefInput);
 
     // We will not insert a new link at caret, so remove link text input field
     gDialog.linkTextInput.hidden = true;
     gDialog.linkTextInput = null;
   }
-    
+
   // This sets enable state on OK button
   doEnabling();
 
   SetWindowLocation();
 }
 
 // Set dialog widgets with attribute data
 // We get them from globalElement copy so this can be used
 //   by AdvancedEdit(), which is shared by all property dialogs
 function InitDialog()
 {
-  // Must use getAttribute, not "globalElement.href", 
+  // Must use getAttribute, not "globalElement.href",
   //  or foreign chars aren't converted correctly!
   gDialog.hrefInput.value = globalElement.getAttribute("href");
 
   // Set "Relativize" checkbox according to current URL state
   SetRelativeCheckbox(gDialog.makeRelativeLink);
 }
 
 function doEnabling()
 {
   // We disable Ok button when there's no href text only if inserting a new link
   var enable = insertNew ? (TrimString(gDialog.hrefInput.value).length > 0) : true;
-  
+
   // anon. content, so can't use SetElementEnabledById here
   var dialogNode = document.getElementById("linkDlg");
   dialogNode.getButton("accept").disabled = !enable;
 
   SetElementEnabledById( "AdvancedEditButton1", enable);
 }
 
 function ChangeLinkLocation()
@@ -283,17 +283,17 @@ function onAccept()
       gActiveEditor.cloneAttributes(anchorElement, globalElement);
 
       // Coalesce into one undo transaction
       gActiveEditor.beginTransaction();
 
       // Get text to use for a new link
       if (insertLinkAtCaret)
       {
-        // Append the link text as the last child node 
+        // Append the link text as the last child node
         //   of the anchor node
         var textNode = gActiveEditor.document.createTextNode(newLinkText);
         if (textNode)
           anchorElement.appendChild(textNode);
         try {
           gActiveEditor.insertElementAtSelection(anchorElement, false);
         } catch (e) {
           dump("Exception occurred in InsertElementAtSelection\n");
@@ -306,33 +306,33 @@ function onAccept()
         //  (may be text, image, or other inline content)
         try {
           gActiveEditor.insertLinkAroundSelection(anchorElement);
         } catch (e) {
           dump("Exception occurred in InsertElementAtSelection\n");
           return true;
         }
       }
-      // Check if the link was to a heading 
+      // Check if the link was to a heading
       if (href in gHNodeArray)
       {
         var anchorNode = gActiveEditor.createElementWithDefaults("a");
         if (anchorNode)
         {
           anchorNode.name = href.substr(1);
 
-          // Insert the anchor into the document, 
+          // Insert the anchor into the document,
           //  but don't let the transaction change the selection
           gActiveEditor.setShouldTxnSetSelection(false);
           gActiveEditor.insertNode(anchorNode, gHNodeArray[href], 0);
           gActiveEditor.setShouldTxnSetSelection(true);
         }
       }
       gActiveEditor.endTransaction();
-    } 
+    }
     else if (!insertNew)
     {
       // We already had a link, but empty HREF means remove it
       EditorRemoveTextProperty("href", "");
     }
     SaveWindowLocation();
     return true;
   }
--- a/editor/ui/dialogs/content/EdListProps.js
+++ b/editor/ui/dialogs/content/EdListProps.js
@@ -41,17 +41,17 @@ function Startup()
   gDialog.BulletStyleList = document.getElementById("BulletStyle");
   gDialog.BulletStyleLabel = document.getElementById("BulletStyleLabel");
   gDialog.StartingNumberInput = document.getElementById("StartingNumber");
   gDialog.StartingNumberLabel = document.getElementById("StartingNumberLabel");
   gDialog.AdvancedEditButton = document.getElementById("AdvancedEditButton1");
   gDialog.RadioGroup = document.getElementById("RadioGroup");
   gDialog.ChangeAllRadio = document.getElementById("ChangeAll");
   gDialog.ChangeSelectedRadio = document.getElementById("ChangeSelected");
-  
+
   // Try to get an existing list(s)
   var mixedObj = { value: null };
   try {
     gListType = editor.getListState(mixedObj, {}, {}, {} );
 
     // We may have mixed list and non-list, or > 1 list type in selection
     gMixedListSelection = mixedObj.value;
 
@@ -80,27 +80,27 @@ function Startup()
 
   gDialog.ListTypeList.focus();
 
   SetWindowLocation();
 }
 
 function InitDialog()
 {
-  // Note that if mixed, we we pay attention 
+  // Note that if mixed, we we pay attention
   //   only to the anchor node's list type
   // (i.e., don't confuse user with "mixed" designation)
   if (gListElement)
     gListType = gListElement.nodeName.toLowerCase();
   else
     gListType = "";
-  
+
   gDialog.ListTypeList.value = gListType;
   gDialog.StartingNumberInput.value = "";
-  
+
   // Last param = true means attribute value is case-sensitive
   var type = globalElement ? GetHTMLOrCSSStyleValue(globalElement, "type", "list-style-type") : null;
 
   var index = 0;
   if (gListType == "ul")
   {
     if (type)
     {
@@ -132,17 +132,17 @@ function InitDialog()
     }
     if (type)
     {
       gNumberStyleType = type;
       gOriginalStyleType = type;
     }
 
     // Convert attribute number to appropriate letter or roman numeral
-    gDialog.StartingNumberInput.value = 
+    gDialog.StartingNumberInput.value =
       ConvertStartAttrToUserString(globalElement.getAttribute("start"), type);
   }
   BuildBulletStyleList();
 }
 
 // Convert attribute number to appropriate letter or roman numeral
 function ConvertStartAttrToUserString(startAttr, type)
 {
@@ -196,25 +196,25 @@ function BuildBulletStyleList()
     gDialog.BulletStyleList.appendItem(GetString("Automatic"), "");
     gDialog.BulletStyleList.appendItem(GetString("Style_1"), gArabic);
     gDialog.BulletStyleList.appendItem(GetString("Style_I"), gUpperRoman);
     gDialog.BulletStyleList.appendItem(GetString("Style_i"), gLowerRoman);
     gDialog.BulletStyleList.appendItem(GetString("Style_A"), gUpperLetters);
     gDialog.BulletStyleList.appendItem(GetString("Style_a"), gLowerLetters);
 
     gDialog.BulletStyleList.value = gNumberStyleType;
-  } 
-  else 
+  }
+  else
   {
     gDialog.BulletStyleList.setAttribute("disabled", "true");
     gDialog.BulletStyleLabel.setAttribute("disabled", "true");
     gDialog.StartingNumberInput.setAttribute("disabled", "true");
     gDialog.StartingNumberLabel.setAttribute("disabled", "true");
   }
-  
+
   // Disable advanced edit button if changing to "normal"
   if (gListType)
     gDialog.AdvancedEditButton.removeAttribute("disabled");
   else
     gDialog.AdvancedEditButton.setAttribute("disabled", "true");
 
   if (label)
     gDialog.BulletStyleLabel.setAttribute("label",label);
@@ -226,17 +226,17 @@ function SelectListType()
   var NewType = gDialog.ListTypeList.value;
 
   if (NewType == "ol")
     SetTextboxFocus(gDialog.StartingNumberInput);
 
   if (gListType != NewType)
   {
     gListType = NewType;
-    
+
     // Create a newlist object for Advanced Editing
     try {
       if (gListType)
         globalElement = GetCurrentEditor().createElementWithDefaults(gListType);
     } catch (e) {}
 
     BuildBulletStyleList();
   }
@@ -251,52 +251,52 @@ function SelectBulletStyle()
     gBulletStyleType = gDialog.BulletStyleList.value;
   else if (gListType == "ol")
   {
     var type = gDialog.BulletStyleList.value;
     if (gNumberStyleType != type)
     {
       // Convert existing input value to attr number first,
       //   then convert to the appropriate format for the newly-selected
-      gDialog.StartingNumberInput.value = 
+      gDialog.StartingNumberInput.value =
         ConvertStartAttrToUserString( ConvertUserStringToStartAttr(gNumberStyleType), type);
 
       gNumberStyleType = type;
       SetTextboxFocus(gDialog.StartingNumberInput);
     }
   }
 }
 
 function ValidateData()
 {
   gBulletStyleType = gDialog.BulletStyleList.value;
-  // globalElement should already be of the correct type 
+  // globalElement should already be of the correct type
 
   if (globalElement)
   {
     var editor = GetCurrentEditor();
     if (gListType == "ul")
     {
       if (gBulletStyleType && gDialog.ChangeAllRadio.selected)
         globalElement.setAttribute("type", gBulletStyleType);
       else
         try {
           editor.removeAttributeOrEquivalent(globalElement, "type", true);
         } catch (e) {}
 
-    } 
+    }
     else if (gListType == "ol")
     {
       if (gBulletStyleType)
         globalElement.setAttribute("type", gBulletStyleType);
       else
         try {
           editor.removeAttributeOrEquivalent(globalElement, "type", true);
         } catch (e) {}
-      
+
       var startingNumber = ConvertUserStringToStartAttr(gBulletStyleType);
       if (startingNumber)
         globalElement.setAttribute("start", startingNumber);
       else
         globalElement.removeAttribute("start");
     }
   }
   return true;
@@ -398,17 +398,17 @@ function onAccept()
       gDialog.RadioGroup.setAttribute("index", changeEntireList ? "0" : "1");
 
     var changeList;
     if (gListElement && gDialog.ChangeAllRadio.selected)
     {
       changeList = true;
     }
     else
-      changeList = gMixedListSelection || gListType != gOriginalListType || 
+      changeList = gMixedListSelection || gListType != gOriginalListType ||
                    gBulletStyleType != gOriginalStyleType;
     if (changeList)
     {
       try {
         if (gListType)
         {
           editor.makeOrChangeList(gListType, changeEntireList,
                      (gBulletStyleType != gOriginalStyleType) ? gBulletStyleType : null);
@@ -427,15 +427,15 @@ function onAccept()
           editor.removeList("ol");
           editor.removeList("ul");
           editor.removeList("dl");
         }
       } catch (e) {}
     }
 
     editor.endTransaction();
-    
+
     SaveWindowLocation();
 
     return true;
   }
   return false;
 }
--- a/editor/ui/dialogs/content/EdListProps.xul
+++ b/editor/ui/dialogs/content/EdListProps.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorListProperties.dtd">
 <dialog title="&windowTitle.label;"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     onload = "Startup()"
     ondialogaccept="return onAccept();"
     ondialogcancel="return onCancel();">
 
@@ -30,18 +30,18 @@
         <menuitem value="ul" label="&bulletList.value;"/>
         <menuitem value="ol" label="&numberList.value;"/>
         <menuitem value="dl" label="&definitionList.value;"/>
       </menupopup>
     </menulist>
   </groupbox>
   <spacer class="spacer"/>
 
-  <!-- message text and list items are set in JS 
-       text value should be identical to string with id=BulletStyle in editor.properties 
+  <!-- message text and list items are set in JS
+       text value should be identical to string with id=BulletStyle in editor.properties
   -->
   <groupbox flex="1"><caption id="BulletStyleLabel" label="&bulletStyle.label;"/>
     <menulist class="MinWidth10em" id="BulletStyle" oncommand="SelectBulletStyle()">
       <menupopup/>
     </menulist>
     <spacer class="spacer"/>
     <hbox>
       <label id="StartingNumberLabel" control="StartingNumber"
--- a/editor/ui/dialogs/content/EdNamedAnchorProps.js
+++ b/editor/ui/dialogs/content/EdNamedAnchorProps.js
@@ -27,17 +27,17 @@ function Startup()
     // We found an element and don't need to insert one
     gInsertNew = false;
 
     // Make a copy to use for AdvancedEdit
     globalElement = gAnchorElement.cloneNode(false);
     gOriginalName = ConvertToCDATAString(gAnchorElement.name);
   } else {
     gInsertNew = true;
-    // We don't have an element selected, 
+    // We don't have an element selected,
     //  so create one with default attributes
     gAnchorElement = editor.createElementWithDefaults(kTagName);
     if (gAnchorElement) {
       // Use the current selection as suggested name
       var name = GetSelectionAsText();
       // Get 40 characters of the selected text and don't add "...",
       //  replace whitespace with "_" and strip non-word characters
       name = ConvertToCDATAString(TruncateStringAtWordEnd(name, 40, false));
@@ -53,17 +53,17 @@ function Startup()
   if(!gAnchorElement)
   {
     dump("Failed to get selected element or create a new one!\n");
     window.close();
     return;
   }
 
   InitDialog();
-  
+
   DoEnabling();
   SetTextboxFocus(gDialog.NameInput);
   SetWindowLocation();
 }
 
 function InitDialog()
 {
   gDialog.NameInput.value = globalElement.getAttribute("name");
@@ -117,17 +117,17 @@ function ValidateData()
   } else {
     // Replace spaces with "_" and strip other characters
     // Note: we could use ConvertAndEscape, but then we'd
     //  have to UnConverAndEscape beforehand - too messy!
     name = ConvertToCDATAString(name);
 
     if (gOriginalName != name && AnchorNameExists(name))
     {
-      ShowInputErrorMessage(GetString("DuplicateAnchorNameError").replace(/%name%/,name));            
+      ShowInputErrorMessage(GetString("DuplicateAnchorNameError").replace(/%name%/,name));
       SetTextboxFocus(gDialog.NameInput);
       return false;
     }
     globalElement.name = name;
   }
   return true;
 }
 
--- a/editor/ui/dialogs/content/EdNamedAnchorProps.xul
+++ b/editor/ui/dialogs/content/EdNamedAnchorProps.xul
@@ -2,17 +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://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EdNamedAnchorProperties.dtd">
 
 <dialog title="&windowTitle.label;"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     onload = "Startup()"
     ondialogaccept="return onAccept();"
     ondialogcancel="return onCancel();">
@@ -22,14 +22,14 @@
   <script type="application/javascript" src="chrome://editor/content/EdDialogCommon.js"/>
   <script type="application/javascript" src="chrome://editor/content/EdNamedAnchorProps.js"/>
 
   <spacer id="location" offsetY="50" persist="offsetX offsetY"/>
 
   <label control="nameInput"
          value="&anchorNameEditField.label;"
          accesskey="&anchorNameEditField.accessKey;"/>
-  <textbox class="MinWidth20em" id="nameInput" oninput="ChangeName()" 
+  <textbox class="MinWidth20em" id="nameInput" oninput="ChangeName()"
              tooltiptext="&nameInput.tooltip;"/>
   <spacer class="spacer"/>
   <!-- from EdDialogOverlay -->
   <vbox id="AdvancedEdit"/>
 </dialog>
--- a/editor/ui/dialogs/content/EdPageProps.js
+++ b/editor/ui/dialogs/content/EdPageProps.js
@@ -24,17 +24,17 @@ function Startup()
     return;
   }
 
   gDialog.PageLocation     = document.getElementById("PageLocation");
   gDialog.PageModDate      = document.getElementById("PageModDate");
   gDialog.TitleInput       = document.getElementById("TitleInput");
   gDialog.AuthorInput      = document.getElementById("AuthorInput");
   gDialog.DescriptionInput = document.getElementById("DescriptionInput");
-  
+
   // Default string for new page is set from DTD string in XUL,
   //   so set only if not new doc URL
   var location = GetDocumentUrl();
   var lastmodString = GetString("Unknown");
 
   if (!IsUrlAboutBlank(location))
   {
     // NEVER show username and password in clear text
@@ -78,17 +78,17 @@ function Startup()
   if (!gDescriptionElement)
   {
     gDescriptionElement = CreateMetaElementWithAttribute("name", "description");
     if (!gDescriptionElement)
       window.close();
 
     gInsertNewDescription = true;
   }
-  
+
   InitDialog();
 
   SetTextboxFocus(gDialog.TitleInput);
 
   SetWindowLocation();
 }
 
 function InitDialog()
@@ -135,17 +135,17 @@ function onAccept()
   {
     var editor = GetCurrentEditor();
     editor.beginTransaction();
 
     // Set title contents even if string is empty
     //  because TITLE is a required HTML element
     if (gTitleWasEdited)
       SetDocumentTitle(gNewTitle);
-    
+
     if (gAuthorWasEdited)
       SetMetaElementContent(gAuthorElement, gAuthor, gInsertNewAuthor, false);
 
     if (gDescWasEdited)
       SetMetaElementContent(gDescriptionElement, gDescription, gInsertNewDescription, false);
 
     editor.endTransaction();
 
--- a/editor/ui/dialogs/content/EdPageProps.xul
+++ b/editor/ui/dialogs/content/EdPageProps.xul
@@ -2,17 +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://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorPageProperties.dtd">
 
 <dialog title="&windowTitle.label;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup();"
         ondialogaccept="return onAccept();"
         ondialogcancel="return onCancel();">
--- a/editor/ui/dialogs/content/EdReplace.js
+++ b/editor/ui/dialogs/content/EdReplace.js
@@ -121,17 +121,17 @@ function onFindNext()
   if (!result)
   {
     var bundle = document.getElementById("findBundle");
     Services.prompt.alert(window, GetString("Alert"), bundle.getString("notFoundWarning"));
     SetTextboxFocus(gReplaceDialog.findInput);
     gReplaceDialog.findInput.select();
     gReplaceDialog.findInput.focus();
     return false;
-  } 
+  }
   return true;
 }
 
 function onReplace()
 {
   if (!gEditor)
     return false;
 
@@ -237,17 +237,17 @@ function onReplaceAll()
   finder.findBackwards = gReplaceDialog.searchBackwards.checked;
 
   // We want the whole operation to be undoable in one swell foop,
   // so start a transaction:
   gEditor.beginTransaction();
 
   // and to make sure we close the transaction, guard against exceptions:
   try {
-    // Make a range containing the current selection, 
+    // Make a range containing the current selection,
     // so we don't go past it when we wrap.
     var selection = gEditor.selection;
     var selecRange;
     if (selection.rangeCount > 0)
       selecRange = selection.getRangeAt(0);
     var origRange = selecRange.cloneRange();
 
     // We'll need a range for the whole document:
--- a/editor/ui/dialogs/content/EdSelectProps.xul
+++ b/editor/ui/dialogs/content/EdSelectProps.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorSelectProperties.dtd">
 <dialog title="&windowTitle.label;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup();"
         buttons="accept,cancel"
         ondialogaccept="return onAccept();"
         ondialogcancel="return onCancel();">
--- a/editor/ui/dialogs/content/EdSpellCheck.js
+++ b/editor/ui/dialogs/content/EdSpellCheck.js
@@ -72,22 +72,22 @@ function spellCheckStarted() {
 
   try {
     curLang = gSpellChecker.GetCurrentDictionary();
   } catch(ex) {
     curLang = "";
   }
 
   InitLanguageMenu(curLang);
-  
+
   // Get the first misspelled word and setup all UI
   NextWord();
 
-  // When startup param is true, setup different UI when spell checking 
-  //   just before sending mail message  
+  // When startup param is true, setup different UI when spell checking
+  //   just before sending mail message
   if (window.arguments[0])
   {
     // If no misspelled words found, simply close dialog and send message
     if (!gMisspelledWord)
     {
       onClose();
       return;
     }
@@ -231,24 +231,24 @@ function SetWidgetsForMisspelledWord()
 
   if (gMisspelledWord)
     SetTextboxFocus(gDialog.ReplaceWordInput);
 }
 
 function CheckWord()
 {
   var word = gDialog.ReplaceWordInput.value;
-  if (word) 
+  if (word)
   {
     if (gSpellChecker.CheckCurrentWord(word))
     {
       FillSuggestedList(word);
       SetReplaceEnable();
-    } 
-    else 
+    }
+    else
     {
       ClearListbox(gDialog.SuggestedList);
       var item = gDialog.SuggestedList.appendItem(GetString("CorrectSpelling"), "");
       if (item) item.setAttribute("disabled", "true");
       // Suppress being able to select the message text
       gAllowSelectWord = false;
     }
   }
@@ -444,17 +444,17 @@ function FillSuggestedList(misspelledWor
       item = list.appendItem(GetString("NoSuggestedWords"));
       if (item) item.setAttribute("disabled", "true");
       gAllowSelectWord = false;
     } else {
       gAllowSelectWord = true;
       // Initialize with first suggested list by selecting it
       gDialog.SuggestedList.selectedIndex = 0;
     }
-  } 
+  }
   else
   {
     item = list.appendItem("", "");
     if (item)
       item.setAttribute("disabled", "true");
   }
 }
 
--- a/editor/ui/dialogs/content/EdSpellCheck.xul
+++ b/editor/ui/dialogs/content/EdSpellCheck.xul
@@ -1,16 +1,16 @@
 <?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/. -->
 
-<?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?> 
-<?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?> 
+<?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
+<?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorSpellCheck.dtd">
 
 <!-- dialog containing a control requiring initial setup -->
 <dialog id="spellCheckDlg" buttons="cancel" title="&windowTitle.label;"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     persist="screenX screenY"
     onload = "Startup()"
     ondialogaccept="return doDefault();"
@@ -72,17 +72,17 @@
                         accesskey="&ignoreButton.accessKey;"/>
               </row>
               <row>
                 <button id="ReplaceAll" oncommand="ReplaceAll();" label="&replaceAllButton.label;"
                         accesskey="&replaceAllButton.accessKey;"/>
                 <button id="IgnoreAll"  oncommand="IgnoreAll();" label="&ignoreAllButton.label;"
                         accesskey="&ignoreAllButton.accessKey;"/>
               </row>
-            </rows> 
+            </rows>
           </grid>
           <separator/>
           <label value="&userDictionary.label;"/>
           <hbox align="start">
             <button class="spell-check" id="AddToDictionary" oncommand="AddToDictionary()" label="&addToUserDictionaryButton.label;"
                     accesskey="&addToUserDictionaryButton.accessKey;"/>
             <button class="spell-check" id="EditDictionary"  oncommand="EditDictionary()" label="&editUserDictionaryButton.label;"
                     accesskey="&editUserDictionaryButton.accessKey;"/>
--- a/editor/ui/dialogs/content/EdTableProps.js
+++ b/editor/ui/dialogs/content/EdTableProps.js
@@ -710,17 +710,17 @@ function DoCellSelection()
     gSelectedCellCount = countObj.value;
   else
     gSelectedCellCount = 0;
 
   // Currently, we can only allow advanced editing on ONE cell element at a time
   //   else we ignore CSS, JS, and HTML attributes not already in dialog
   SetElementEnabled(gDialog.AdvancedEditCell, gSelectedCellCount == 1);
 
-  gDialog.AdvancedEditCell.setAttribute("tooltiptext", 
+  gDialog.AdvancedEditCell.setAttribute("tooltiptext",
     gSelectedCellCount > 1 ? GetString("AdvancedEditForCellMsg") :
                              gDialog.AdvancedEditCellToolTipText);
 }
 
 function SetSelectionButtons()
 {
   if (gSelectedCellsType == SELECT_ROW)
   {
@@ -776,19 +776,19 @@ function ValidateTableData()
 
   gNewColCount = Number(ValidateNumber(gDialog.TableColumnsInput, null, 1, gMaxColumns, null, true, true));
   if (gValidationError) return false;
 
   // If user is deleting any cells, get confirmation
   // (This is a global to the dialog and we ask only once per dialog session)
   if ( !gCanDelete &&
         (gNewRowCount < gRowCount ||
-         gNewColCount < gColCount) ) 
+         gNewColCount < gColCount) )
   {
-    if (ConfirmWithTitle(GetString("DeleteTableTitle"), 
+    if (ConfirmWithTitle(GetString("DeleteTableTitle"),
                          GetString("DeleteTableMsg"),
                          GetString("DeleteCells")) )
     {
       gCanDelete = true;
     }
     else
     {
       SetTextboxFocus(gNewRowCount < gRowCount ? gDialog.TableRowsInput : gDialog.TableColumnsInput);
--- a/editor/ui/dialogs/content/EdTableProps.xul
+++ b/editor/ui/dialogs/content/EdTableProps.xul
@@ -2,17 +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://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorTableProperties.dtd">
 
 <dialog title="&tableWindow.title;"
     id="tableDlg"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     onload="Startup()"
     buttons="accept,extra1,cancel"
@@ -166,17 +166,17 @@
                 <image/>
                 <label value="&cellSelectNext.label;"
                        accesskey="&cellSelectNext.accessKey;"
                        control="NextButton"/>
               </button>
             </hbox>
           </vbox>
           <spacer class="bigspacer"/>
-            <description class="wrap" flex="1">&applyBeforeChange.label;</description> 
+            <description class="wrap" flex="1">&applyBeforeChange.label;</description>
         </groupbox>
         <hbox align="center">
           <!-- cell size groupbox -->
           <groupbox><caption label="&size.label;"/>
             <grid>
               <columns><column/><column/><column flex="1"/></columns>
               <rows>
                 <row align="center">
@@ -255,12 +255,12 @@
         <separator class="groove"/>
         <hbox align="center">
           <description class="wrap" flex="1" style="width: 1em">&cellUseCheckboxHelp.label;</description>
           <!-- From EdDialogOvlerlay.xul -->
           <button id="AdvancedEditButton2"/>
         </hbox>
         <spacer flex="1"/>
       </vbox><!-- Cell Panel -->
-    </tabpanels> 
+    </tabpanels>
   </tabbox>
   <spacer class="spacer"/>
 </dialog>
--- a/editor/ui/dialogs/content/EdTextAreaProps.js
+++ b/editor/ui/dialogs/content/EdTextAreaProps.js
@@ -67,17 +67,17 @@ function Startup()
   // Make a copy to use for AdvancedEdit
   globalElement = textareaElement.cloneNode(false);
 
   InitDialog();
 
   InitMoreFewer();
 
   SetTextboxFocus(gDialog.textareaName);
-  
+
   SetWindowLocation();
 }
 
 function InitDialog()
 {
   gDialog.textareaName.value = globalElement.getAttribute("name");
   gDialog.textareaRows.value = globalElement.getAttribute("rows");
   gDialog.textareaCols.value = globalElement.getAttribute("cols");
--- a/editor/ui/dialogs/content/EdTextAreaProps.xul
+++ b/editor/ui/dialogs/content/EdTextAreaProps.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorTextAreaProperties.dtd">
 <dialog title="&windowTitle.label;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup();"
         buttons="accept,cancel"
         ondialogaccept="return onAccept();"
         ondialogcancel="return onCancel();">
--- a/editor/ui/dialogs/content/EditConflict.js
+++ b/editor/ui/dialogs/content/EditConflict.js
@@ -5,17 +5,17 @@
 // dialog initialization code
 function Startup()
 {
   if (!GetCurrentEditor())
   {
     window.close();
     return;
   }
-  
+
   SetWindowLocation();
 }
 
 function KeepCurrentPage()
 {
   // Simply close dialog and don't change current page
   //TODO: Should we force saving of the current page?
   SaveWindowLocation();
--- a/editor/ui/dialogs/content/EditConflict.xul
+++ b/editor/ui/dialogs/content/EditConflict.xul
@@ -2,32 +2,32 @@
 
 <!-- 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://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditConflict.dtd">
 
 <dialog buttons="cancel" title="&windowTitle.label;"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     onload = "Startup()"
     ondialogcancel="return onClose();">
 
   <!-- Methods common to all editor dialogs -->
   <script type="application/javascript" src="chrome://editor/content/editorUtilities.js"/>
   <script type="application/javascript" src="chrome://editor/content/EdDialogCommon.js"/>
   <script type="application/javascript" src="chrome://editor/content/EditConflict.js"/>
 
   <spacer id="location" offsetY="50" persist="offsetX offsetY"/>
-  
+
   <label value ="&conflictWarning.label;"/>
   <spacer class="bigspacer"/>
   <label value ="&conflictResolve.label;"/>
   <spacer class="bigspacer"/>
   <hbox flex="1">
     <spacer class="bigspacer"/>
     <button label="&keepCurrentPageButton.label;"
             oncommand="KeepCurrentPage()"/>
--- a/editor/ui/dialogs/content/EditorPublish.js
+++ b/editor/ui/dialogs/content/EditorPublish.js
@@ -101,17 +101,17 @@ function Startup()
           gPublishSiteData[siteIndex].docDir = docDir;
 
           //XXX HOW DO WE DECIDE WHAT "OTHER" DIR TO USE?
           //gPublishSiteData[siteIndex].otherDir = docDir;
         }
       }
       if (!siteFound)
       {
-        // Not found in site database 
+        // Not found in site database
         // Setup for a new site and use data from a remote URL
         if (!addNewSite)
           AddNewSite();
 
         addNewSite = true;
 
         var publishData = CreatePublishDataFromUrl(docUrl);
         if (publishData)
@@ -128,34 +128,34 @@ function Startup()
     }
   }
   try {
     gPreviousTitle = GetDocumentTitle();
   } catch (e) {}
 
   gDialog.PageTitleInput.value = gPreviousTitle;
   gDialog.FilenameInput.value = decodeURIComponent(filename);
-  
+
   if (!addNewSite)
   {
     // If not adding a site and we haven't selected a site -- use initial or default site
     if (gDialog.SiteList.selectedIndex == -1)
       gDialog.SiteList.selectedIndex = (gInitialSiteIndex != -1) ? gInitialSiteIndex : gDefaultSiteIndex;
 
     // Fill in  all the site data for currently-selected site
     SelectSiteList();
     SetTextboxFocus(gDialog.PageTitleInput);
   }
 
   if (gDialog.SiteList.selectedIndex == -1)
   {
     // No selected site -- assume same directory
     gDialog.OtherDirRadiogroup.selectedItem = gDialog.SameLocationRadio;
   }
-  else if (gPublishSiteData[gDialog.SiteList.selectedIndex].docDir == 
+  else if (gPublishSiteData[gDialog.SiteList.selectedIndex].docDir ==
         gPublishSiteData[gDialog.SiteList.selectedIndex].otherDir)
   {
     // For now, check "same location" if dirs are already set to same directory
     gDialog.OtherDirRadiogroup.selectedItem = gDialog.SameLocationRadio;
   }
   else
   {
     gDialog.OtherDirRadiogroup.selectedItem = gDialog.UseSubdirRadio;
@@ -200,17 +200,17 @@ function doEnabling()
   var disableOther = !gDialog.OtherDirCheckbox.checked;
   gDialog.SameLocationRadio.disabled = disableOther;
   gDialog.UseSubdirRadio.disabled = disableOther;
   gDialog.OtherDirList.disabled = (disableOther || gDialog.SameLocationRadio.selected);
 }
 
 function SelectSiteList()
 {
-  var selectedSiteIndex = gDialog.SiteList.selectedIndex;  
+  var selectedSiteIndex = gDialog.SiteList.selectedIndex;
 
   var siteName = "";
   var publishUrl = "";
   var browseUrl = "";
   var username = "";
   var password = "";
   var savePassword = false;
   var publishOtherFiles = true;
@@ -260,21 +260,21 @@ function SelectSiteList()
 }
 
 function AddNewSite()
 {
   // Button in Publish panel allows user
   //  to automatically switch to "Settings" panel
   //  to enter data for new site
   SwitchPanel(gDialog.SettingsTab);
-  
+
   gDialog.SiteList.selectedIndex = -1;
 
   SelectSiteList();
-  
+
   gSettingsChanged = true;
 
   SetTextboxFocus(gDialog.SiteNameInput);
 }
 
 function SelectPublishTab()
 {
   if (gSettingsChanged && !ValidateSettings())
@@ -324,80 +324,80 @@ function GetDocDirInput()
 function GetOtherDirInput()
 {
   gDialog.OtherDirList.value = FormatDirForPublishing(gDialog.OtherDirList.value);
   return gDialog.OtherDirList.value;
 }
 
 function ChooseDir(menulist)
 {
-  //TODO: For FTP publish destinations, get file listing of just dirs 
+  //TODO: For FTP publish destinations, get file listing of just dirs
   //  and build a tree to let user select dir
 }
 
 function ValidateSettings()
 {
   var siteName = TrimString(gDialog.SiteNameInput.value);
   if (!siteName)
   {
     ShowErrorInPanel(gDialog.SettingsTab, "MissingSiteNameError", gDialog.SiteNameInput);
     return false;
   }
   if (PublishSiteNameExists(siteName, gPublishSiteData, gDialog.SiteList.selectedIndex))
   {
     SwitchPanel(gDialog.SettingsTab);
-    ShowInputErrorMessage(GetString("DuplicateSiteNameError").replace(/%name%/, siteName));            
+    ShowInputErrorMessage(GetString("DuplicateSiteNameError").replace(/%name%/, siteName));
     SetTextboxFocus(gDialog.SiteNameInput);
     return false;
   }
 
   // Extract username and password while removing them from publishingUrl
   var urlUserObj = {};
   var urlPassObj = {};
   var publishUrl = StripUsernamePassword(gDialog.PublishUrlInput.value, urlUserObj, urlPassObj);
   if (publishUrl)
   {
     publishUrl = FormatUrlForPublishing(publishUrl);
 
     // Assume scheme = "ftp://" if missing
     // This compensates when user enters hostname w/o scheme (as most ISPs provide)
     if (!GetScheme(publishUrl))
-      publishUrl = "ftp://" + publishUrl; 
+      publishUrl = "ftp://" + publishUrl;
 
     gDialog.PublishUrlInput.value = publishUrl;
   }
   else
   {
     ShowErrorInPanel(gDialog.SettingsTab, "MissingPublishUrlError", gDialog.PublishUrlInput);
     return false;
   }
   var browseUrl = GetBrowseUrlInput();
 
   var username = TrimString(gDialog.UsernameInput.value);
   var savePassword = gDialog.SavePassword.checked;
   var password = gDialog.PasswordInput.value;
   var publishOtherFiles = gDialog.OtherDirCheckbox.checked;
-  
-  //XXX If there was a username and/or password in the publishUrl 
+
+  //XXX If there was a username and/or password in the publishUrl
   //    AND in the input field, which do we use?
-  //    Let's use those in url only if input is empty 
+  //    Let's use those in url only if input is empty
   if (!username)
   {
     username = urlUserObj.value;
     gDialog.UsernameInput.value = username;
     gSettingsChanged = true;
   }
   if (!password)
   {
     password = urlPassObj.value;
     gDialog.PasswordInput.value = password;
     gSettingsChanged = true;
   }
 
-  // Update or add data for a site 
+  // Update or add data for a site
   var siteIndex = gDialog.SiteList.selectedIndex;
   var newSite = false;
 
   if (siteIndex == -1)
   {
     // No site is selected, add a new site at the end
     if (gPublishSiteData)
     {
@@ -405,17 +405,17 @@ function ValidateSettings()
     }
     else
     {
       // First time: start entire site array
       gPublishSiteData = new Array(1);
       siteIndex = 0;
       gDefaultSiteIndex = 0;
       gDefaultSiteName = siteName;
-    }    
+    }
     gPublishSiteData[siteIndex] = {};
     gPublishSiteData[siteIndex].docDir = "";
     gPublishSiteData[siteIndex].otherDir = "";
     gPublishSiteData[siteIndex].dirList = [""];
     gPublishSiteData[siteIndex].publishOtherFiles = true;
     gPublishSiteData[siteIndex].previousSiteName = siteName;
     newSite = true;
   }
@@ -446,32 +446,32 @@ function ValidateSettings()
   // Rebuild the site menulist if we added a new site
   if (newSite)
   {
     FillSiteList();
     gDialog.SiteList.selectedIndex = siteIndex;
   }
   else
   {
-    // Update selected item if sitename changed 
+    // Update selected item if sitename changed
     var selectedItem = gDialog.SiteList.selectedItem;
     if (selectedItem)
     {
       var oldName = selectedItem.getAttribute("label");
       if (oldName != siteName)
       {
         selectedItem.setAttribute("label", siteName);
         gDialog.SiteList.setAttribute("label", siteName);
         gSettingsChanged = true;
         if (oldName == gDefaultSiteName)
           gDefaultSiteName = siteName;
       }
     }
   }
-  
+
   // Get the directory name in site to publish to
   var docDir = GetDocDirInput();
 
   gPublishSiteData[siteIndex].docDir = docDir;
 
   // And directory for images and other files
   var otherDir = GetOtherDirInput();
   if (gDialog.SameLocationRadio.selected)
@@ -482,17 +482,17 @@ function ValidateSettings()
   gPublishSiteData[siteIndex].otherDir = otherDir;
 
   // Fill return data object
   gReturnData.siteName = siteName;
   gReturnData.previousSiteName = gPublishSiteData[siteIndex].previousSiteName;
   gReturnData.publishUrl = publishUrl;
   gReturnData.browseUrl = browseUrl;
   gReturnData.username = username;
-  // Note that we use the password for the next publish action 
+  // Note that we use the password for the next publish action
   // even if savePassword is false; but we won't save it in PasswordManager database
   gReturnData.password = password;
   gReturnData.savePassword = savePassword;
   gReturnData.docDir = gPublishSiteData[siteIndex].docDir;
   gReturnData.otherDir = gPublishSiteData[siteIndex].otherDir;
   gReturnData.publishOtherFiles = publishOtherFiles;
   gReturnData.dirList = gPublishSiteData[siteIndex].dirList;
   return true;
--- a/editor/ui/dialogs/content/EditorPublish.xul
+++ b/editor/ui/dialogs/content/EditorPublish.xul
@@ -2,18 +2,18 @@
 
 <!-- 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://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
-<?xul-overlay href="chrome://editor/content/EditorPublishOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
+<?xul-overlay href="chrome://editor/content/EditorPublishOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorPublish.dtd">
 
 <dialog title="&windowTitle.label;"
         id="publishDlg"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup()"
         buttons="accept,cancel"
@@ -42,32 +42,32 @@
         <grid pack="start">
           <columns><column/><column/><column/></columns>
           <rows>
             <row align="center">
               <label value="&siteList.label;"
                      accesskey="&siteList.accesskey;"
                      control="SiteList"/>
               <!-- Contents filled in at runtime -->
-              <menulist id="SiteList" 
+              <menulist id="SiteList"
                 style="min-width:18em; max-width:18em;" crop="right"
                 tooltiptext="&siteList.tooltip;"
                 oncommand="SelectSiteList();"/>
               <hbox>
                 <button label="&newSiteButton.label;"
                         accesskey="&newSiteButton.accesskey;"
                         oncommand="AddNewSite();"/>
                 <spacer flex="1"/>
               </hbox>
             </row>
             <spacer class="spacer"/>
             <row align="center">
               <label value="&pageTitle.label;" accesskey="&pageTitle.accesskey;"
                      control="PageTitleInput"/>
-              <textbox id="PageTitleInput" 
+              <textbox id="PageTitleInput"
                 tooltiptext="&pageTitle.tooltip;" class="minWidth15"/>
               <label value="&pageTitleExample.label;"/>
             </row>
             <row align="center">
               <label value="&filename.label;" accesskey="&filename.accesskey;"
                      control="FilenameInput"/>
               <textbox id="FilenameInput"
                 tooltiptext="&filename.tooltip;" class="minWidth15 uri-element"/>
@@ -82,17 +82,17 @@
         <hbox align="center">
           <!-- Contents filled in at runtime -->
           <menulist id="DocDirList" class="minWidth20 uri-element" editable="true"  flex="1"
                     tooltiptext="&docDirList.tooltip;" oninput="onInputSettings();"/>
         </hbox>
         <spacer class="spacer"/>
         <groupbox>
           <caption>
-            <checkbox id="OtherDirCheckbox" label="&publishImgCheckbox.label;" 
+            <checkbox id="OtherDirCheckbox" label="&publishImgCheckbox.label;"
                       accesskey="&publishImgCheckbox.accesskey;"
                       tooltiptext="&publishImgCheckbox.tooltip;"
                       oncommand="doEnabling();"/>
           </caption>
           <vbox>
           <radiogroup id="OtherDirRadiogroup">
             <hbox>
               <spacer class="checkbox-spacer"/>
@@ -122,11 +122,11 @@
         <spacer flex="1"/>
       </vbox><!-- Publish Panel -->
 
       <!-- SETTINGS PANEL -->
       <hbox id="SettingsPanel">
         <!-- from EditorPublishOverlay.xul -->
         <vbox id="PublishSettingsInputs" flex="1"/>
       </hbox><!-- Settings Panel -->
-    </tabpanels> 
+    </tabpanels>
   </tabbox>
 </dialog>
--- a/editor/ui/dialogs/content/EditorPublishOverlay.xul
+++ b/editor/ui/dialogs/content/EditorPublishOverlay.xul
@@ -24,17 +24,17 @@
     <spacer class="spacer"/>
     <label value="&siteUrl.label;" accesskey="&siteUrl.accesskey;"
            control="PublishUrlInput"/>
     <textbox id="PublishUrlInput" class="MinWidth20em uri-element"
              tooltiptext="&siteUrl.tooltip;" oninput="onInputSettings();"/>
     <spacer class="spacer"/>
     <label value="&browseUrl.label;" accesskey="&browseUrl.accesskey;"
            control="BrowseUrlInput"/>
-    <textbox id="BrowseUrlInput" class="MinWidth20em uri-element" 
+    <textbox id="BrowseUrlInput" class="MinWidth20em uri-element"
              tooltiptext="&browseUrl.tooltip;" oninput="onInputSettings();"/>
     <spacer class="spacer"/>
   </groupbox>
   <groupbox id="LoginSettingsBox">
     <caption label="&loginInfo.label;"/>
     <grid>
       <columns><column flex="1"/><column flex="3"/></columns>
       <rows>
@@ -43,21 +43,21 @@
                  control="UsernameInput"/>
           <textbox id="UsernameInput" class="MinWidth10em" flex="1"
                    tooltiptext="&username.tooltip;" oninput="onInputSettings();"/>
         </row>
         <row align="center">
           <label value="&password.label;" accesskey="&password.accesskey;"
                  control="PasswordInput"/>
           <hbox>
-            <textbox id="PasswordInput" type="password" class="MinWidth5em" 
+            <textbox id="PasswordInput" type="password" class="MinWidth5em"
                      oninput="onInputSettings();"
                      tooltiptext="&password.tooltip;"/>
             <checkbox id="SavePassword" label="&savePassword.label;"
-                      accesskey="&savePassword.accesskey;" 
+                      accesskey="&savePassword.accesskey;"
                       tooltiptext="&savePassword.tooltip;"
                       oncommand="onInputSettings();"/>
           </hbox>
         </row>
       </rows>
     </grid>
     <spacer class="spacer"/>
   </groupbox>
--- a/editor/ui/dialogs/content/EditorPublishProgress.js
+++ b/editor/ui/dialogs/content/EditorPublishProgress.js
@@ -74,30 +74,30 @@ function Startup()
   gDialog.Close              = document.documentElement.getButton("cancel");
 
   SetWindowLocation();
   var title = GetDocumentTitle();
   if (!title)
     title = "(" + opener.gUntitledString + ")";
   document.title = GetString("PublishProgressCaption").replace(/%title%/, title);
 
-  document.getElementById("PublishToSite").value = 
-    GetString("PublishToSite").replace(/%title%/, TruncateStringAtWordEnd(gPublishData.siteName, 25)); 
+  document.getElementById("PublishToSite").value =
+    GetString("PublishToSite").replace(/%title%/, TruncateStringAtWordEnd(gPublishData.siteName, 25));
 
   // Show publishing destination URL
   document.getElementById("PublishUrl").value = gPublishData.publishUrl;
-  
+
   // Show subdirectories only if not empty
   if (gPublishData.docDir || gPublishData.otherDir)
   {
     if (gPublishData.docDir)
       document.getElementById("docDir").value = gPublishData.docDir;
     else
       document.getElementById("DocSubdir").hidden = true;
-      
+
     if (gPublishData.publishOtherFiles && gPublishData.otherDir)
       document.getElementById("otherDir").value = gPublishData.otherDir;
     else
       document.getElementById("OtherSubdir").hidden = true;
   }
   else
     document.getElementById("Subdirectories").hidden = true;
 
@@ -192,31 +192,31 @@ function SetProgressFinished(filename, n
     {
       case kFileNotFound:
         gFileNotFound = true;
         if (filename)
           gStatusMessage = GetString("FileNotFound").replace(/%file%/, filename);
         break;
       case kNetReset:
         // We get this when subdir doesn't exist AND
-        //   if filename used is same as an existing subdir 
-        var dir = (gPublishData.filename == filename) ? 
+        //   if filename used is same as an existing subdir
+        var dir = (gPublishData.filename == filename) ?
                      gPublishData.docDir : gPublishData.otherDir;
 
         if (dir)
         {
           // This is the ambiguous case when we can't tell if subdir or filename is bad
           // Remove terminal "/" from dir string and insert into message
           gStatusMessage = GetString("SubdirDoesNotExist").replace(/%dir%/, dir.slice(0, dir.length-1));
           gStatusMessage = gStatusMessage.replace(/%file%/, filename);
 
           // Remove directory from saved prefs
-          // XXX Note that if subdir is good, 
-          //     but filename = next level subdirectory name, 
-          //     we really shouldn't remove subdirectory, 
+          // XXX Note that if subdir is good,
+          //     but filename = next level subdirectory name,
+          //     we really shouldn't remove subdirectory,
           //     but it's impossible to differentiate this case!
           RemovePublishSubdirectoryFromPrefs(gPublishData, dir);
         }
         else if (filename)
           gStatusMessage = GetString("FilenameIsSubdir").replace(/%file%/, filename);
 
         break;
       case kNotConnected:
@@ -335,30 +335,30 @@ function onEnterKey()
 
 function RequestCloseDialog()
 {
   // Finish progress messages, settings buttons etc.
   SetProgressFinished(null, 0);
 
   if (!gDialog.KeepOpen.checked)
   {
-    // Leave window open a minimum amount of time 
+    // Leave window open a minimum amount of time
     gTimerID = setTimeout(CloseDialog, 3000);
   }
 
   // Set "completed" message if we succeeded
   // (Some image files may have failed,
   //  but we don't abort publishing for that)
   if (!gPublishingFailed)
   {
     gDialog.FinalStatusMessage.value = GetString("PublishCompleted");
     if (gFileNotFound && gTotalFileCount-gSucceededCount)
     {
       // Show number of files that failed to upload
-      gStatusMessage = 
+      gStatusMessage =
         (GetString("FailedFileMsg").replace(/%x%/,(gTotalFileCount-gSucceededCount)))
           .replace(/%total%/,gTotalFileCount);
 
       SetStatusMessage(gStatusMessage);
     }
   }
 }
 
--- a/editor/ui/dialogs/content/EditorPublishProgress.xul
+++ b/editor/ui/dialogs/content/EditorPublishProgress.xul
@@ -1,17 +1,17 @@
 <?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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorPublishProgress.dtd">
 <!-- dialog containing a control requiring initial setup -->
 <dialog title=""
     id="publishProgressDlg"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     buttons="cancel"
     buttonlabelclose="&closeButton.label;"
--- a/editor/ui/dialogs/content/EditorPublishSettings.js
+++ b/editor/ui/dialogs/content/EditorPublishSettings.js
@@ -148,17 +148,17 @@ function SetDefault()
   if (!gPublishSiteData)
     return;
 
   var index = gDialog.SiteList.selectedIndex;
   if (index != -1)
   {
     gDefaultSiteIndex = index;
     gDefaultSiteName = gPublishSiteData[index].siteName;
-    
+
     // Set bold style on new default
     var item = gDialog.SiteList.firstChild;
     while (item)
     {
       SetPublishItemStyle(item);
       item = item.nextSibling;
     }
   }
@@ -189,20 +189,20 @@ function SelectSiteList()
 function SetSelectedSiteIndex(index)
 {
   gIsSelecting = true;
   gDialog.SiteList.selectedIndex = index;
   gIsSelecting = false;
 }
 
 function InitSiteSettings(selectedSiteIndex)
-{  
+{
   // Index to the site we will need to update if settings changed
   gCurrentSiteIndex = selectedSiteIndex;
-  
+
   SetSelectedSiteIndex(selectedSiteIndex);
   var haveData = (gPublishSiteData && selectedSiteIndex != -1);
 
   gDialog.SiteNameInput.value = haveData ? gPublishSiteData[selectedSiteIndex].siteName : "";
   gDialog.PublishUrlInput.value = haveData ? gPublishSiteData[selectedSiteIndex].publishUrl : "";
   gDialog.BrowseUrlInput.value = haveData ? gPublishSiteData[selectedSiteIndex].browseUrl : "";
   gDialog.UsernameInput.value = haveData ? gPublishSiteData[selectedSiteIndex].username : "";
 
@@ -239,17 +239,17 @@ function UpdateSettings()
   var newName = TrimString(gDialog.SiteNameInput.value);
   if (!newName)
   {
     ShowInputErrorMessage(GetString("MissingSiteNameError"), gDialog.SiteNameInput);
     return false;
   }
   if (PublishSiteNameExists(newName, gPublishSiteData, gCurrentSiteIndex))
   {
-    ShowInputErrorMessage(GetString("DuplicateSiteNameError").replace(/%name%/, newName));            
+    ShowInputErrorMessage(GetString("DuplicateSiteNameError").replace(/%name%/, newName));
     SetTextboxFocus(gDialog.SiteNameInput);
     return false;
   }
 
   var newUrl = FormatUrlForPublishing(gDialog.PublishUrlInput.value);
   if (!newUrl)
   {
     ShowInputErrorMessage(GetString("MissingPublishUrlError"), gDialog.PublishUrlInput);
@@ -269,17 +269,17 @@ function UpdateSettings()
   else if (gCurrentSiteIndex == -1)
   {
     // No currently-selected site,
     //  must be adding a new site
     // Add new data at the end of list
     gCurrentSiteIndex = gPublishSiteData.length;
     newSiteData = true;
   }
-    
+
   if (newSiteData)
   {
     // Init new site profile
     gPublishSiteData[gCurrentSiteIndex] = {};
     gPublishSiteData[gCurrentSiteIndex].docDir = "";
     gPublishSiteData[gCurrentSiteIndex].otherDir = "";
     gPublishSiteData[gCurrentSiteIndex].dirList = [""];
     gPublishSiteData[gCurrentSiteIndex].previousSiteName = newName;
@@ -299,22 +299,22 @@ function UpdateSettings()
   if (gPublishSiteData.length == 1 && !gDefaultSiteName)
   {
     gDefaultSiteName = gPublishSiteData[0].siteName;
     gDefaultSiteIndex = 0;
   }
 
   FillSiteList();
 
-  // Select current site in list  
+  // Select current site in list
   SetSelectedSiteIndex(gCurrentSiteIndex);
 
   // Signal saving data to prefs
   gSiteDataChanged = true;
-  
+
   // Clear current site flags
   gSettingsChanged = false;
   gAddNewSite = false;
 
   return true;
 }
 
 function onAccept()
--- a/editor/ui/dialogs/content/EditorPublishSettings.xul
+++ b/editor/ui/dialogs/content/EditorPublishSettings.xul
@@ -2,18 +2,18 @@
 
 <!-- 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://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?> 
-<?xul-overlay href="chrome://editor/content/EditorPublishOverlay.xul"?> 
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
+<?xul-overlay href="chrome://editor/content/EditorPublishOverlay.xul"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorPublish.dtd">
 
 <dialog title="&windowTitleSettings.label;"
         id="publishSettingsDlg"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="Startup()"
         buttons="accept,cancel"
--- a/editor/ui/dialogs/content/EditorSaveAsCharset.js
+++ b/editor/ui/dialogs/content/EditorSaveAsCharset.js
@@ -49,24 +49,24 @@ function Startup()
   var editor = GetCurrentEditor();
   if (!editor)
   {
     window.close();
     return;
   }
 
   gDialog.TitleInput    = document.getElementById("TitleInput");
-  gDialog.charsetTree   = document.getElementById('CharsetTree'); 
+  gDialog.charsetTree   = document.getElementById('CharsetTree');
   gDialog.exportToText  = document.getElementById('ExportToText');
 
   gContenttypeElement = GetMetaElementByAttribute("http-equiv", "content-type");
-  if (!gContenttypeElement && (editor.contentsMIMEType != 'text/plain')) 
+  if (!gContenttypeElement && (editor.contentsMIMEType != 'text/plain'))
   {
     gContenttypeElement = CreateMetaElementWithAttribute("http-equiv", "content-type");
-    if (!gContenttypeElement ) 
+    if (!gContenttypeElement )
 	{
       window.close();
       return;
     }
     gInsertNewContentType = true;
   }
 
   try {
@@ -82,27 +82,27 @@ function Startup()
 
   // Use the same text as the messagebox for getting title by regular "Save"
   document.getElementById("EnterTitleLabel").setAttribute("value",GetString("NeedDocTitle"));
   // This is an <HTML> element so it wraps -- append a child textnode
   var helpTextParent = document.getElementById("TitleHelp");
   var helpText = document.createTextNode(GetString("DocTitleHelp"));
   if (helpTextParent)
     helpTextParent.appendChild(helpText);
-  
+
   // SET FOCUS TO FIRST CONTROL
   SetTextboxFocus(gDialog.TitleInput);
-  
+
   gInitDone = true;
-  
+
   SetWindowLocation();
 }
 
-  
-function InitDialog() 
+
+function InitDialog()
 {
   gDialog.TitleInput.value = GetDocumentTitle();
 
   var tree = gDialog.charsetTree;
   var index = gCharsetInfo.map(info => info.value).indexOf(gCharset);
   if (index >= 0) {
     tree.view.selection.select(index);
     tree.treeBoxObject.ensureRowIsVisible(index);
@@ -110,47 +110,47 @@ function InitDialog()
 }
 
 
 function onAccept()
 {
   var editor = GetCurrentEditor();
   editor.beginTransaction();
 
-  if(gCharsetWasChanged) 
+  if(gCharsetWasChanged)
   {
      try {
-       SetMetaElementContent(gContenttypeElement, "text/html; charset=" + gCharset, gInsertNewContentType, true);     
+       SetMetaElementContent(gContenttypeElement, "text/html; charset=" + gCharset, gInsertNewContentType, true);
       editor.documentCharacterSet = gCharset;
     } catch (e) {}
   }
 
   editor.endTransaction();
 
-  if(gTitleWasEdited) 
+  if(gTitleWasEdited)
     SetDocumentTitle(TrimString(gDialog.TitleInput.value));
 
   window.opener.ok = true;
   window.opener.exportToText = gDialog.exportToText.checked;
   SaveWindowLocation();
   return true;
 }
 
 
 function SelectCharset()
 {
-  if(gInitDone) 
+  if(gInitDone)
   {
-    try 
+    try
     {
       gCharset = gCharsetInfo[gDialog.charsetTree.currentIndex].value;
       if (gCharset)
         gCharsetWasChanged = true;
     }
     catch(e) {}
   }
 }
 
 
 function TitleChanged()
 {
-  gTitleWasEdited = true; 
+  gTitleWasEdited = true;
 }
--- a/editor/ui/jar.mn
+++ b/editor/ui/jar.mn
@@ -7,96 +7,96 @@ comm.jar:
 #ifdef MOZ_SUITE
 % overlay chrome://communicator/content/tasksOverlay.xul chrome://editor/content/editorTasksOverlay.xul
 % overlay chrome://messenger/content/mailWindowOverlay.xul chrome://editor/content/editorMailOverlay.xul
 % overlay chrome://communicator/content/pref/preferences.xul chrome://editor/content/editorPrefsOverlay.xul
 % overlay chrome://communicator/content/pref/pref-appearance.xul chrome://editor/content/editorPrefsOverlay.xul
 % overlay chrome://navigator/content/navigatorOverlay.xul chrome://editor/content/editorNavigatorOverlay.xul
 % content editor-region %content/editor-region/
 #endif
-      content/editor/editor.js                                 (composer/content/editor.js) 
-      content/editor/editorUtilities.js                        (composer/content/editorUtilities.js) 
-      content/editor/ComposerCommands.js                       (composer/content/ComposerCommands.js) 
-      content/editor/EditorContent.css                         (composer/content/EditorContent.css)  
-      content/editor/editorSmileyOverlay.xul                   (composer/content/editorSmileyOverlay.xul) 
-      content/editor/editorApplicationOverlay.js               (composer/content/editorApplicationOverlay.js) 
+      content/editor/editor.js                                 (composer/content/editor.js)
+      content/editor/editorUtilities.js                        (composer/content/editorUtilities.js)
+      content/editor/ComposerCommands.js                       (composer/content/ComposerCommands.js)
+      content/editor/EditorContent.css                         (composer/content/EditorContent.css)
+      content/editor/editorSmileyOverlay.xul                   (composer/content/editorSmileyOverlay.xul)
+      content/editor/editorApplicationOverlay.js               (composer/content/editorApplicationOverlay.js)
       content/editor/images/tag-anchor.gif                     (composer/content/images/tag-anchor.gif)
-      content/editor/EdDialogCommon.js                         (dialogs/content/EdDialogCommon.js) 
-      content/editor/EdLinkProps.xul                           (dialogs/content/EdLinkProps.xul) 
-      content/editor/EdLinkProps.js                            (dialogs/content/EdLinkProps.js) 
-      content/editor/EdImageProps.xul                          (dialogs/content/EdImageProps.xul) 
-      content/editor/EdImageProps.js                           (dialogs/content/EdImageProps.js) 
-      content/editor/EdImageOverlay.xul                        (dialogs/content/EdImageOverlay.xul) 
-      content/editor/EdImageOverlay.js                         (dialogs/content/EdImageOverlay.js) 
-      content/editor/EdHLineProps.xul                          (dialogs/content/EdHLineProps.xul) 
-      content/editor/EdHLineProps.js                           (dialogs/content/EdHLineProps.js) 
-      content/editor/EdReplace.xul                             (dialogs/content/EdReplace.xul) 
-      content/editor/EdReplace.js                              (dialogs/content/EdReplace.js) 
-      content/editor/EdSpellCheck.xul                          (dialogs/content/EdSpellCheck.xul) 
-      content/editor/EdSpellCheck.js                           (dialogs/content/EdSpellCheck.js) 
-      content/editor/EdDictionary.xul                          (dialogs/content/EdDictionary.xul) 
-      content/editor/EdDictionary.js                           (dialogs/content/EdDictionary.js) 
-      content/editor/EdNamedAnchorProps.xul                    (dialogs/content/EdNamedAnchorProps.xul) 
-      content/editor/EdNamedAnchorProps.js                     (dialogs/content/EdNamedAnchorProps.js) 
-      content/editor/EdInsertTOC.xul                           (dialogs/content/EdInsertTOC.xul) 
-      content/editor/EdInsertTOC.js                            (dialogs/content/EdInsertTOC.js) 
-      content/editor/EdInsertTable.xul                         (dialogs/content/EdInsertTable.xul) 
-      content/editor/EdInsertTable.js                          (dialogs/content/EdInsertTable.js) 
-      content/editor/EdInsertMath.xul                          (dialogs/content/EdInsertMath.xul) 
-      content/editor/EdInsertMath.js                           (dialogs/content/EdInsertMath.js) 
-      content/editor/EdTableProps.xul                          (dialogs/content/EdTableProps.xul) 
-      content/editor/EdTableProps.js                           (dialogs/content/EdTableProps.js) 
-      content/editor/EdFormProps.xul                           (dialogs/content/EdFormProps.xul) 
-      content/editor/EdFormProps.js                            (dialogs/content/EdFormProps.js) 
-      content/editor/EdInputProps.xul                          (dialogs/content/EdInputProps.xul) 
-      content/editor/EdInputProps.js                           (dialogs/content/EdInputProps.js) 
-      content/editor/EdInputImage.xul                          (dialogs/content/EdInputImage.xul) 
-      content/editor/EdInputImage.js                           (dialogs/content/EdInputImage.js) 
-      content/editor/EdTextAreaProps.xul                       (dialogs/content/EdTextAreaProps.xul) 
-      content/editor/EdTextAreaProps.js                        (dialogs/content/EdTextAreaProps.js) 
-      content/editor/EdSelectProps.xul                         (dialogs/content/EdSelectProps.xul) 
-      content/editor/EdSelectProps.js                          (dialogs/content/EdSelectProps.js) 
-      content/editor/EdButtonProps.xul                         (dialogs/content/EdButtonProps.xul) 
-      content/editor/EdButtonProps.js                          (dialogs/content/EdButtonProps.js) 
-      content/editor/EdLabelProps.xul                          (dialogs/content/EdLabelProps.xul) 
-      content/editor/EdLabelProps.js                           (dialogs/content/EdLabelProps.js) 
-      content/editor/EdFieldSetProps.xul                       (dialogs/content/EdFieldSetProps.xul) 
-      content/editor/EdFieldSetProps.js                        (dialogs/content/EdFieldSetProps.js) 
-      content/editor/EdInsSrc.xul                              (dialogs/content/EdInsSrc.xul) 
-      content/editor/EdInsSrc.js                               (dialogs/content/EdInsSrc.js) 
-      content/editor/EdInsertChars.xul                         (dialogs/content/EdInsertChars.xul) 
-      content/editor/EdInsertChars.js                          (dialogs/content/EdInsertChars.js) 
-      content/editor/EdDialogOverlay.xul                       (dialogs/content/EdDialogOverlay.xul) 
-      content/editor/EdAdvancedEdit.xul                        (dialogs/content/EdAdvancedEdit.xul) 
-      content/editor/EdAdvancedEdit.js                         (dialogs/content/EdAdvancedEdit.js) 
-      content/editor/EdListProps.xul                           (dialogs/content/EdListProps.xul) 
-      content/editor/EdListProps.js                            (dialogs/content/EdListProps.js) 
-      content/editor/EdPageProps.xul                           (dialogs/content/EdPageProps.xul) 
-      content/editor/EdPageProps.js                            (dialogs/content/EdPageProps.js) 
-      content/editor/EdColorProps.xul                          (dialogs/content/EdColorProps.xul) 
-      content/editor/EdColorProps.js                           (dialogs/content/EdColorProps.js) 
-      content/editor/EdColorPicker.xul                         (dialogs/content/EdColorPicker.xul) 
-      content/editor/EdColorPicker.js                          (dialogs/content/EdColorPicker.js) 
-      content/editor/EdAECSSAttributes.js                      (dialogs/content/EdAECSSAttributes.js) 
-      content/editor/EdAEHTMLAttributes.js                     (dialogs/content/EdAEHTMLAttributes.js) 
-      content/editor/EdAEJSEAttributes.js                      (dialogs/content/EdAEJSEAttributes.js) 
-      content/editor/EdAEAttributes.js                         (dialogs/content/EdAEAttributes.js) 
-      content/editor/EdConvertToTable.xul                      (dialogs/content/EdConvertToTable.xul) 
-      content/editor/EdConvertToTable.js                       (dialogs/content/EdConvertToTable.js) 
+      content/editor/EdDialogCommon.js                         (dialogs/content/EdDialogCommon.js)
+      content/editor/EdLinkProps.xul                           (dialogs/content/EdLinkProps.xul)
+      content/editor/EdLinkProps.js                            (dialogs/content/EdLinkProps.js)
+      content/editor/EdImageProps.xul                          (dialogs/content/EdImageProps.xul)
+      content/editor/EdImageProps.js                           (dialogs/content/EdImageProps.js)
+      content/editor/EdImageOverlay.xul                        (dialogs/content/EdImageOverlay.xul)
+      content/editor/EdImageOverlay.js                         (dialogs/content/EdImageOverlay.js)
+      content/editor/EdHLineProps.xul                          (dialogs/content/EdHLineProps.xul)
+      content/editor/EdHLineProps.js                           (dialogs/content/EdHLineProps.js)
+      content/editor/EdReplace.xul                             (dialogs/content/EdReplace.xul)
+      content/editor/EdReplace.js                              (dialogs/content/EdReplace.js)
+      content/editor/EdSpellCheck.xul                          (dialogs/content/EdSpellCheck.xul)
+      content/editor/EdSpellCheck.js                           (dialogs/content/EdSpellCheck.js)
+      content/editor/EdDictionary.xul                          (dialogs/content/EdDictionary.xul)
+      content/editor/EdDictionary.js                           (dialogs/content/EdDictionary.js)
+      content/editor/EdNamedAnchorProps.xul                    (dialogs/content/EdNamedAnchorProps.xul)
+      content/editor/EdNamedAnchorProps.js                     (dialogs/content/EdNamedAnchorProps.js)
+      content/editor/EdInsertTOC.xul                           (dialogs/content/EdInsertTOC.xul)
+      content/editor/EdInsertTOC.js                            (dialogs/content/EdInsertTOC.js)
+      content/editor/EdInsertTable.xul                         (dialogs/content/EdInsertTable.xul)
+      content/editor/EdInsertTable.js                          (dialogs/content/EdInsertTable.js)
+      content/editor/EdInsertMath.xul                          (dialogs/content/EdInsertMath.xul)
+      content/editor/EdInsertMath.js                           (dialogs/content/EdInsertMath.js)
+      content/editor/EdTableProps.xul                          (dialogs/content/EdTableProps.xul)
+      content/editor/EdTableProps.js                           (dialogs/content/EdTableProps.js)
+      content/editor/EdFormProps.xul                           (dialogs/content/EdFormProps.xul)
+      content/editor/EdFormProps.js                            (dialogs/content/EdFormProps.js)
+      content/editor/EdInputProps.xul                          (dialogs/content/EdInputProps.xul)
+      content/editor/EdInputProps.js                           (dialogs/content/EdInputProps.js)
+      content/editor/EdInputImage.xul                          (dialogs/content/EdInputImage.xul)
+      content/editor/EdInputImage.js                           (dialogs/content/EdInputImage.js)
+      content/editor/EdTextAreaProps.xul                       (dialogs/content/EdTextAreaProps.xul)
+      content/editor/EdTextAreaProps.js                        (dialogs/content/EdTextAreaProps.js)
+      content/editor/EdSelectProps.xul                         (dialogs/content/EdSelectProps.xul)
+      content/editor/EdSelectProps.js                          (dialogs/content/EdSelectProps.js)
+      content/editor/EdButtonProps.xul                         (dialogs/content/EdButtonProps.xul)
+      content/editor/EdButtonProps.js                          (dialogs/content/EdButtonProps.js)
+      content/editor/EdLabelProps.xul                          (dialogs/content/EdLabelProps.xul)
+      content/editor/EdLabelProps.js                           (dialogs/content/EdLabelProps.js)
+      content/editor/EdFieldSetProps.xul                       (dialogs/content/EdFieldSetProps.xul)
+      content/editor/EdFieldSetProps.js                        (dialogs/content/EdFieldSetProps.js)
+      content/editor/EdInsSrc.xul                              (dialogs/content/EdInsSrc.xul)
+      content/editor/EdInsSrc.js                               (dialogs/content/EdInsSrc.js)
+      content/editor/EdInsertChars.xul                         (dialogs/content/EdInsertChars.xul)
+      content/editor/EdInsertChars.js                          (dialogs/content/EdInsertChars.js)
+      content/editor/EdDialogOverlay.xul                       (dialogs/content/EdDialogOverlay.xul)
+      content/editor/EdAdvancedEdit.xul                        (dialogs/content/EdAdvancedEdit.xul)
+      content/editor/EdAdvancedEdit.js                         (dialogs/content/EdAdvancedEdit.js)
+      content/editor/EdListProps.xul                           (dialogs/content/EdListProps.xul)
+      content/editor/EdListProps.js                            (dialogs/content/EdListProps.js)
+      content/editor/EdPageProps.xul                           (dialogs/content/EdPageProps.xul)
+      content/editor/EdPageProps.js                            (dialogs/content/EdPageProps.js)
+      content/editor/EdColorProps.xul                          (dialogs/content/EdColorProps.xul)
+      content/editor/EdColorProps.js                           (dialogs/content/EdColorProps.js)
+      content/editor/EdColorPicker.xul                         (dialogs/content/EdColorPicker.xul)
+      content/editor/EdColorPicker.js                          (dialogs/content/EdColorPicker.js)
+      content/editor/EdAECSSAttributes.js                      (dialogs/content/EdAECSSAttributes.js)
+      content/editor/EdAEHTMLAttributes.js                     (dialogs/content/EdAEHTMLAttributes.js)
+      content/editor/EdAEJSEAttributes.js                      (dialogs/content/EdAEJSEAttributes.js)
+      content/editor/EdAEAttributes.js                         (dialogs/content/EdAEAttributes.js)
+      content/editor/EdConvertToTable.xul                      (dialogs/content/EdConvertToTable.xul)
+      content/editor/EdConvertToTable.js                       (dialogs/content/EdConvertToTable.js)
 #ifdef MOZ_SUITE
       content/editor/editor.xul                                (composer/content/editor.xul)
       content/editor/editingOverlay.js                         (composer/content/editingOverlay.js)
       content/editor/publishprefs.js                           (composer/content/publishprefs.js)
       content/editor/EditorContextMenu.js                      (composer/content/EditorContextMenu.js)
       content/editor/EditorContextMenuOverlay.xul              (composer/content/EditorContextMenuOverlay.xul)
       content/editor/EditorAllTags.css                         (composer/content/EditorAllTags.css)
-      content/editor/editorNavigatorOverlay.xul                (composer/content/editorNavigatorOverlay.xul) 
-      content/editor/editorMailOverlay.xul                     (composer/content/editorMailOverlay.xul) 
-      content/editor/editorTasksOverlay.xul                    (composer/content/editorTasksOverlay.xul) 
-      content/editor/editorOverlay.xul                         (composer/content/editorOverlay.xul) 
+      content/editor/editorNavigatorOverlay.xul                (composer/content/editorNavigatorOverlay.xul)
+      content/editor/editorMailOverlay.xul                     (composer/content/editorMailOverlay.xul)
+      content/editor/editorTasksOverlay.xul                    (composer/content/editorTasksOverlay.xul)
+      content/editor/editorOverlay.xul                         (composer/content/editorOverlay.xul)
       content/editor/editingOverlay.xul                        (composer/content/editingOverlay.xul)
       content/editor/composerOverlay.xul                       (composer/content/composerOverlay.xul)
       content/editor/pref-toolbars.xul                         (composer/content/pref-toolbars.xul)
       content/editor/pref-editing.xul                          (composer/content/pref-editing.xul)
       content/editor/pref-editing.js                           (composer/content/pref-editing.js)
       content/editor/pref-composer.xul                         (composer/content/pref-composer.xul)
       content/editor/editorPrefsOverlay.xul                    (composer/content/editorPrefsOverlay.xul)
       content/editor/StructBarContextMenu.js                   (composer/content/StructBarContextMenu.js)
--- a/editor/ui/locales/en-US/chrome/composer/editor.dtd
+++ b/editor/ui/locales/en-US/chrome/composer/editor.dtd
@@ -1,15 +1,15 @@
 <!-- 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/. -->
 
 <!-- Window title -->
 <!-- LOCALIZATION NOTE  (editorWindow.titlemodifier): DONT_TRANSLATE -->
-<!ENTITY editorWindow.titlemodifier "Composer"> 
+<!ENTITY editorWindow.titlemodifier "Composer">
 <!ENTITY editorWindow.titlemodifiermenuseparator " - ">
 
 <!-- Menu items:  the . means that the menu item isn't implemented yet -->
 
 <!-- Toolbar-only items -->
 <!ENTITY compositionToolbar.tooltip "Composition Toolbar">
 <!ENTITY previewToolbarCmd.label "Browse">
 <!ENTITY previewToolbarCmd.tooltip "Load this page in the browser">
--- a/editor/ui/locales/en-US/chrome/composer/editor.properties
+++ b/editor/ui/locales/en-US/chrome/composer/editor.properties
@@ -1,15 +1,15 @@
 # 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/.
 
 # LOCALIZATION NOTE FILE: embedded "\n" represent HTML breaks (<br>)
 # Don't translate embedded "\n".
-# Don't translate strings like this: %variable% 
+# Don't translate strings like this: %variable%
 #  as they will be replaced using JavaScript
 #
 No=No
 Save=Save
 More=More
 Less=Less
 MoreProperties=More Properties
 FewerProperties=Fewer Properties
@@ -37,18 +37,18 @@ InputError=Error
 Alert=Alert
 CantEditFramesetMsg=Composer cannot edit HTML framesets, or pages with inline frames. For framesets, try editing the page for each frame separately. For pages with iframes, save a copy of the page and remove the <iframe> tag.
 CantEditMimeTypeMsg=This type of page can't be edited.
 CantEditDocumentMsg=This page can't be edited for an unknown reason.
 BeforeClosing=before closing
 BeforePreview=before viewing in the browser
 BeforeValidate=before validating the document
 # LOCALIZATION NOTE (SaveFilePrompt, PublishPrompt): Don't translate %title% and %reason% (this is the reason for asking user to close, such as "before closing")
-SaveFilePrompt=Save changes to "%title%" %reason%? 
-PublishPrompt=Save changes to "%title%" %reason%? 
+SaveFilePrompt=Save changes to "%title%" %reason%?
+PublishPrompt=Save changes to "%title%" %reason%?
 SaveFileFailed=Saving file failed!
 
 # Publishing error strings:
 # LOCALIZATION NOTE Don't translate %dir% or %file% in the Publishing error strings:
 FileNotFound=%file% not found.
 SubdirDoesNotExist=The subdirectory "%dir%" doesn't exist on this site or the filename "%file%" is already in use by another subdirectory.
 FilenameIsSubdir=The filename "%file%" is already in use by another subdirectory.
 ServerNotAvailable=The server is not available. Check your connection and try again later.
@@ -59,17 +59,17 @@ AccessDenied=You do not have permission 
 UnknownPublishError=Unknown publishing error occurred.
 PublishFailed=Publishing failed.
 PublishCompleted=Publishing completed.
 AllFilesPublished=All files published
 # LOCALIZATION NOTE Don't translate %x% or %total%
 FailedFileMsg=%x% of %total% files failed to publish.
 # End-Publishing error strings
 Prompt=Prompt
-# LOCALIZATION NOTE (PromptFTPUsernamePassword): Don't translate %host% 
+# LOCALIZATION NOTE (PromptFTPUsernamePassword): Don't translate %host%
 PromptFTPUsernamePassword=Enter username and password for FTP server at %host%
 RevertCaption=Revert To Last Saved
 Revert=Revert
 SendPageReason=before sending this page
 Send=Send
 ## LOCALIZATION NOTE (PublishProgressCaption, PublishToSite, AbandonChanges): Don't translate %title%
 PublishProgressCaption=Publishing: %title%
 PublishToSite=Publishing to Site: %title%
@@ -116,17 +116,17 @@ Percent=percent
 PercentOfCell=% of cell
 PercentOfWindow=% of window
 PercentOfTable=% of table
 #LOCALIZATION NOTE (untitledTitle): %S is the window #.  No plural handling needed.
 untitledTitle=untitled-%S
 untitledDefaultFilename=untitled
 ShowToolbar=Show Toolbar
 HideToolbar=Hide Toolbar
-ImapError=Unable to load image 
+ImapError=Unable to load image
 ImapCheck=\nPlease select a new location (URL) and try again.
 SaveToUseRelativeUrl=Relative URLs can only be used on pages which have been saved
 NoNamedAnchorsOrHeadings=(No named anchors or headings in this page)
 TextColor=Text Color
 HighlightColor=Highlight Color
 PageColor=Page Background Color
 BlockColor=Block Background Color
 TableColor=Table Background Color
@@ -161,20 +161,20 @@ MissingPublishFilename=Please enter a fi
 #LOCALIZATION NOTE (DuplicateSiteNameError): Don't translate %name%
 DuplicateSiteNameError="%name%" already exists. Please enter a different site name.
 AdvancedProperties=Advanced Properties…
 AdvancedEditForCellMsg=Advanced Edit is unavailable when multiple cells are selected
 # LOCALIZATION NOTE (ObjectProperties):Don't translate "%obj%" it will be replaced with one of above object nouns
 ObjectProperties=%obj% Properties…
 # LOCALIZATION NOTE This character must be in the above string and not conflict with other accesskeys in Format menu
 ObjectPropertiesAccessKey=o
-# LOCALIZATION NOTE (JoinSelectedCells): This variable should contain the "tableJoinCells.accesskey" 
+# LOCALIZATION NOTE (JoinSelectedCells): This variable should contain the "tableJoinCells.accesskey"
 # letter as defined in editorOverlay.dtd
 JoinSelectedCells=Join Selected Cells
-# LOCALIZATION NOTE (JoinCellToRight): This variable should contain the "tableJoinCells.accesskey" 
+# LOCALIZATION NOTE (JoinCellToRight): This variable should contain the "tableJoinCells.accesskey"
 # letter as defined in editorOverlay.dtd
 JoinCellToRight=Join with Cell to the Right
 JoinCellAccesskey=j
 # LOCALIZATION NOTE (TableSelectKey): Ctrl key on a keyboard
 TableSelectKey=Ctrl+
 # LOCALIZATION NOTE (XulKeyMac): Command key on a Mac keyboard
 XulKeyMac=Cmd+
 # LOCALIZATION NOTE (Del): Del key on a keyboard