[Pkg-mozext-commits] [compactheader] 199/441: New version 1.2.5: Backport fix for toggle header in command button menu Backport removal of subject tooltip Remove support for Thunderbird 3.0 Add support for Thunderbird 5.0b2pre: Cleanup of buttons on uninstall will not work.

David Prévot taffit at moszumanska.debian.org
Wed Mar 18 12:28:58 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository compactheader.

commit 82ab7268f1d52b489900fd40e2616bbc105e0ca3
Author: joachim.herb <none at none>
Date:   Sat Jun 4 15:14:43 2011 +0000

    New version 1.2.5:
    Backport fix for toggle header in command button menu
    Backport removal of subject tooltip
    Remove support for Thunderbird 3.0
    Add support for Thunderbird 5.0b2pre: Cleanup of buttons on uninstall will not work.
    
    --HG--
    branch : B_1_2
---
 chrome.manifest                                    |   31 +-
 chrome/CompactHeader/content/CHTMessenger.js       |  184 +++
 chrome/CompactHeader/content/CHTMessenger.xul      |   52 +
 .../CompactHeader/content/compactHeaderOverlay.js  | 1209 +++++++++++++++-----
 .../CompactHeader/content/compactHeaderOverlay.xul |  262 ++++-
 install.rdf                                        |   15 +-
 6 files changed, 1431 insertions(+), 322 deletions(-)

diff --git a/chrome.manifest b/chrome.manifest
index 9d842dd..3230cbc 100644
--- a/chrome.manifest
+++ b/chrome.manifest
@@ -1,5 +1,26 @@
-content CompactHeader chrome/CompactHeader/content/
-skin CompactHeader global chrome/CompactHeader/skin/global/
-locale CompactHeader en-US chrome/CompactHeader/locale/en-US/
-locale CompactHeader de-DE chrome/CompactHeader/locale/de-DE/
-overlay chrome://messenger/content/msgHdrViewOverlay.xul chrome://CompactHeader/content/compactHeaderOverlay.xul 
\ No newline at end of file
+content   CompactHeader                 chrome/CompactHeader/content/
+
+skin      CompactHeader     global      chrome/CompactHeader/skin/global/
+skin      CompactHeader-os  classic/1.0 chrome/CompactHeader/skin/common/
+skin      CompactHeader-os  classic/1.0 chrome/CompactHeader/skin/gnome/   os=Linux
+skin      CompactHeader-os  classic/1.0 chrome/CompactHeader/skin/windows/ os=WINNT
+skin      CompactHeader-os  classic/1.0 chrome/CompactHeader/skin/mac/     os=Darwin
+
+locale    CompactHeader     en-US   chrome/CompactHeader/locale/en-US/
+locale    CompactHeader     de-DE   chrome/CompactHeader/locale/de-DE/
+locale    CompactHeader     it-IT   chrome/CompactHeader/locale/it-IT/
+locale    CompactHeader     da-DK   chrome/CompactHeader/locale/da-DK/
+locale    CompactHeader     fr-FR   chrome/CompactHeader/locale/fr-FR/
+locale    CompactHeader     es-ES   chrome/CompactHeader/locale/es-ES/
+
+overlay chrome://messenger/content/msgHdrViewOverlay.xul chrome://CompactHeader/content/compactHeaderOverlay.xul
+overlay chrome://global/content/customizeToolbar.xul     chrome://CompactHeader/content/customizeToolbarOverlay.xul
+style   chrome://global/content/customizeToolbar.xul     chrome://CompactHeader-os/skin/osdef.css
+style   chrome://global/content/customizeToolbar.xul     chrome://CompactHeader/skin/CompactHeader.css
+
+overlay chrome://messenger/content/messageWindow.xul     chrome://CompactHeader/content/buttonsOverlay.xul
+overlay chrome://messenger/content/messenger.xul         chrome://CompactHeader/content/buttonsOverlay.xul
+style   chrome://global/content/customizeToolbar.xul     chrome://CompactHeader-os/skin/buttonsOverlay.css
+
+overlay chrome://messenger/content/messageWindow.xul     chrome://CompactHeader/content/CHTMessenger.xul
+overlay chrome://messenger/content/messenger.xul         chrome://CompactHeader/content/CHTMessenger.xul
diff --git a/chrome/CompactHeader/content/CHTMessenger.js b/chrome/CompactHeader/content/CHTMessenger.js
new file mode 100644
index 0000000..eeea38f
--- /dev/null
+++ b/chrome/CompactHeader/content/CHTMessenger.js
@@ -0,0 +1,184 @@
+/*
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is Mozilla Communicator client code, released
+# March 31, 1998.
+#
+# The Initial Developer of the Original Code is
+# Netscape Communications Corporation.
+# Portions created by the Initial Developer are Copyright (C) 1998-1999
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+# Joachim Herb <joachim.herb at gmx.de>
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+*/
+
+if(!org) var org={};
+if(!org.mozdev) org.mozdev={};
+if(!org.mozdev.customizeHeaderToolbar) org.mozdev.customizeHeaderToolbar = {};
+
+org.mozdev.customizeHeaderToolbar.messenger = function(){
+  var pub = {};
+
+//  pub.init = function () {
+//    var onLoadFkt = document.getElementById("messengerWindow").getAttribute("onload");
+//    if (onLoadFkt) {
+//      var strTest = new RegExp('OnLoadMessenger', 'g');;
+//      onLoadFkt = onLoadFkt.replace(strTest, 
+//        "org.mozdev.customizeHeaderToolbar.messenger.CHTLoadMessenger");
+//      document.getElementById("messengerWindow").setAttribute("onload", onLoadFkt);
+//    }
+//  }
+  
+  pub.saveToolboxData = function() {
+    var hdrToolbox = document.getElementById("header-view-toolbox");
+    var hdrToolbar = document.getElementById("header-view-toolbar");
+    var saveToolbox = document.getElementById("CHTSaveToolboxData");
+    var saveToolbar = document.getElementById("CHTSaveToolbarData");
+    if (hdrToolbox && hdrToolbar && saveToolbox && saveToolbar) {
+      saveToolbar.firstPermanentChild = hdrToolbar.firstPermanentChild;
+      saveToolbar.lastPermanentChild  = hdrToolbar.lastPermanentChild;
+      if (hdrToolbox.palette) {
+        saveToolbox.palette    = hdrToolbox.palette.cloneNode(true);
+      }
+      else {
+        //alert("no palette")
+        var hdrPalette = document.getElementById("header-view-toolbar-palette");
+        if (!hdrPalette) {
+          //alert("no header-view-toolbar-palette");
+        }
+        else {
+          //alert("header-view-toolbar-palette");
+        }
+      }
+      if (hdrToolbox.toolbarset) {
+        saveToolbox.toolbarset = hdrToolbox.toolbarset.cloneNode(true);
+      }
+      else {
+        //alert("no toolbarset")
+      }
+      saveToolbox.setAttribute("gotData", "true");
+    }
+    else {
+      //alert("no toolbox/bar");
+      saveToolbox.setAttribute("gotData", "false");
+    }
+  }
+  
+  pub.loadToolboxData = function() {
+    var hdrToolbox = document.getElementById("header-view-toolbox");
+    var hdrToolbar = document.getElementById("header-view-toolbar");
+    var saveToolbox = document.getElementById("CHTSaveToolboxData");
+    var saveToolbar = document.getElementById("CHTSaveToolbarData");
+    if (hdrToolbox && hdrToolbar && saveToolbox && saveToolbar && saveToolbox.getAttribute("gotData") == "true") {
+      hdrToolbar.firstPermanentChild = saveToolbar.firstPermanentChild;
+      hdrToolbar.lastPermanentChild = saveToolbar.lastPermanentChild;
+      if (saveToolbox.palette) {
+        hdrToolbox.palette = saveToolbox.palette.cloneNode(true);
+      } else {
+      }
+      if (saveToolbox.toolbarset) {
+        hdrToolbox.toolbarset = saveToolbox.toolbarset.cloneNode(true);
+      } else {
+      }
+    } 
+  }
+  
+
+  return pub;
+}();
+
+org.mozdev.customizeHeaderToolbar.pane = function(){
+  var pub = {};
+  
+  pub.CHTUpdateReplyButton = function () {
+    UpdateReplyButtons();
+  }
+  
+  pub.CHTUpdateJunkButton = function () {
+    UpdateJunkButton();    
+  }
+  
+  pub.CHTSetDefaultButtons = function () {
+    var hdrToolbox = document.getElementById("header-view-toolbox");
+    var hdrToolbar = document.getElementById("header-view-toolbar");
+    var hdrBarDefaultSet = hdrToolbar.getAttribute("defaultset");
+    var hdrBoxDefaultLabelalign = hdrToolbox.getAttribute("defaultlabelalign");
+    var hdrBoxDefaultIconsize = hdrToolbox.getAttribute("defaulticonsize");
+    var hdrBoxDefaultMode = hdrToolbox.getAttribute("defaultmode");
+    var hdrBarDefaultIconsize = hdrToolbar.getAttribute("defaulticonsize");
+    var hdrBarDefaultMode = hdrToolbar.getAttribute("defaultmode");  
+    
+    hdrToolbox.setAttribute("labelalign", hdrBoxDefaultLabelalign);
+    hdrToolbox.setAttribute("iconsize", hdrBoxDefaultIconsize);
+    hdrToolbox.setAttribute("mode", hdrBoxDefaultMode);
+    hdrToolbar.setAttribute("iconsize", hdrBarDefaultIconsize);
+    hdrToolbar.setAttribute("mode", hdrBarDefaultMode);
+    
+    hdrToolbar.currentSet = hdrBarDefaultSet;
+    hdrToolbar.setAttribute("currentset", hdrBarDefaultSet);
+    
+    document.persist(hdrToolbox.id,"labelalign");
+    document.persist(hdrToolbox.id,"iconsize");
+    document.persist(hdrToolbox.id,"mode");
+    document.persist(hdrToolbar.id,"iconsize");
+    document.persist(hdrToolbar.id,"mode");
+    document.persist(hdrToolbar.id,"currentset");
+  }
+  
+  pub.CHTCleanupButtons = function() {
+    var hdrToolbox = document.getElementById("header-view-toolbox");
+    var hdrToolbar = document.getElementById("header-view-toolbar");
+    var hdrBarDefaultSet = "hdrReplyButton,hdrReplyAllButton,hdrReplyListButton,hdrForwardButton,hdrArchiveButton,hdrJunkButton,hdrTrashButton";
+    var hdrBoxDefaultLabelalign = hdrToolbox.getAttribute("defaultlabelalign");
+    var hdrBoxDefaultIconsize =   hdrToolbox.getAttribute("defaulticonsize");
+    var hdrBoxDefaultMode =       hdrToolbox.getAttribute("defaultmode");
+    var hdrBarDefaultIconsize = hdrToolbar.getAttribute("defaulticonsize");
+    var hdrBarDefaultMode =     hdrToolbar.getAttirbute("defaultmode");
+    
+    hdrToolbox.setAttribute("labelalign", hdrBoxDefaultLabelalign);
+    hdrToolbox.setAttribute("iconsize", hdrBoxDefaultIconsize);
+    hdrToolbox.setAttribute("mode", hdrBoxDefaultMode);
+    hdrToolbar.setAttribute("iconsize", hdrBarDefaultIconsize);
+    hdrToolbar.setAttribute("mode", hdrBarDefaultMode);
+    
+    hdrToolbar.currentSet = hdrBarDefaultSet;
+    hdrToolbar.setAttribute("currentset", hdrBarDefaultSet);
+    
+    document.persist(hdrToolbox.id,"labelalign");
+    document.persist(hdrToolbox.id,"iconsize");
+    document.persist(hdrToolbox.id,"mode");
+    document.persist(hdrToolbar.id,"iconsize");
+    document.persist(hdrToolbar.id,"mode");
+    document.persist(hdrToolbar.id,"currentset");
+  }
+
+  return pub;
+}();
+
+//org.mozdev.customizeHeaderToolbar.messenger.init();
diff --git a/chrome/CompactHeader/content/CHTMessenger.xul b/chrome/CompactHeader/content/CHTMessenger.xul
new file mode 100644
index 0000000..90bb0f3
--- /dev/null
+++ b/chrome/CompactHeader/content/CHTMessenger.xul
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!-- ***** BEGIN LICENSE BLOCK *****
+   - Version: MPL 1.1/GPL 2.0/LGPL 2.1
+   -
+   - The contents of this file are subject to the Mozilla Public License Version
+   - 1.1 (the "License"); you may not use this file except in compliance with
+   - the License. You may obtain a copy of the License at
+   - http://www.mozilla.org/MPL/
+   -
+   - Software distributed under the License is distributed on an "AS IS" basis,
+   - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+   - for the specific language governing rights and limitations under the
+   - License.
+   -
+   - The Original Code is Thunderbird Toolbar Customization Overlay.
+   -
+   - The Initial Developer of the Original Code is
+   - Mozilla Messaging, Inc.
+   - Portions created by the Initial Developer are Copyright (C) 2009
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributor(s):
+   - Joachim Herb <joachim.herb at gmx.de>
+   -
+   - Alternatively, the contents of this file may be used under the terms of
+   - either the GNU General Public License Version 2 or later (the "GPL"), or
+   - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+   - in which case the provisions of the GPL or the LGPL are applicable instead
+   - of those above. If you wish to allow use of your version of this file only
+   - under the terms of either the GPL or the LGPL, and not to allow others to
+   - use your version of this file under the terms of the MPL, indicate your
+   - decision by deleting the provisions above and replace them with the notice
+   - and other provisions required by the LGPL or the GPL. If you do not delete
+   - the provisions above, a recipient may use your version of this file under
+   - the terms of any one of the MPL, the GPL or the LGPL.
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
+<!DOCTYPE overlay [
+]>
+
+
+<overlay id="CHTmessengerWindow"
+         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+  <script type="application/x-javascript" 
+          src="chrome://CompactHeader/content/CHTMessenger.js"/>
+  <window id="messengerWindow">
+    <toolbox id="CHTSaveToolboxData" collapsed="true">
+      <toolbar id="CHTSaveToolbarData" collapsed="true"/>
+    </toolbox>
+  </window>
+</overlay>
diff --git a/chrome/CompactHeader/content/compactHeaderOverlay.js b/chrome/CompactHeader/content/compactHeaderOverlay.js
index 95824e0..a8b3fdb 100644
--- a/chrome/CompactHeader/content/compactHeaderOverlay.js
+++ b/chrome/CompactHeader/content/compactHeaderOverlay.js
@@ -21,9 +21,7 @@
 # the Initial Developer. All Rights Reserved.
 #
 # Contributor(s):
-#   Markus Hossner <markushossner at gmx.de>
-#   Mark Banner <bugzilla at standard8.plus.com>
-#   David Ascher <dascher at mozillamessaging.com>
+#   Joachim Herb <joachim.herb at gmx.de>
 #
 # Alternatively, the contents of this file may be used under the terms of
 # either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -53,288 +51,989 @@
 // view in the message header pane.
 ////////////////////////////////////////////////////////////////////////////////////
 
-var gCoheCollapsedHeaderViewMode = false;
-var gCoheBuiltCollapsedView = false;
+if(!org) var org={};
+if(!org.mozdev) org.mozdev={};
+if(!org.mozdev.compactHeader) org.mozdev.compactHeader = {};
 
-/**
- * The collapsed view: very lightweight. We only show a couple of fields.  See
- * msgHdrViewOverlay.js for details of the field definition semantics.
- */
- var gCoheCollapsedHeaderList = [
-  {name:"subject", outputFunction:coheUpdateHeaderValueInTextNode},
-  {name:"from", useToggle:true, useShortView:true, outputFunction: OutputEmailAddresses},
-//  {name:"toCcBcc", useToggle:true, useShortView:true, outputFunction: OutputEmailAddresses},
-  {name:"date", outputFunction:OutputDate}];
+org.mozdev.compactHeader.pane = function() {
+  var pub = {};
 
-	var prefBranch = Components.classes["@mozilla.org/preferences-service;1"]
+  const COHE_EXTENSION_UUID = "{58D4392A-842E-11DE-B51A-C7B855D89593}";
+  
+//  var regex = {
+//    /* taken from https://bugzilla.mozilla.org/show_bug.cgi?id=57104 */
+//    links : /((\w+):\/\/[^<>()'"\s]+|www(\.[-\w]+){2,})/
+//  };
+//  
+  var gCoheCollapsedHeaderViewMode = false;
+  var gCoheBuiltCollapsedView = false;
+  
+  /**
+   * The collapsed view: very lightweight. We only show a couple of fields.  See
+   * msgHdrViewOverlay.js for details of the field definition semantics.
+   */
+  var gCoheCollapsedHeader1LListLongAddresses = [
+    {name:"subject", outputFunction:coheOutputSubject},
+    {name:"from", useToggle:true, outputFunction:coheOutputEmailAddresses},
+//    {name:"toCcBcc", useToggle:true, outputFunction:coheOutputEmailAddresses},
+    {name:"date", outputFunction:coheUpdateDateValue}
+    ];
+  
+  var gCoheCollapsedHeader2LListLongAddresses = [
+    {name:"subject", outputFunction:coheOutputSubject},
+    {name:"from", useToggle:true, outputFunction:coheOutputEmailAddresses},
+    {name:"toCcBcc", useToggle:true, outputFunction:coheOutputEmailAddresses},
+    {name:"date", outputFunction:coheUpdateDateValue}
+    ];
+    
+  var cohePrefBranch = Components.classes["@mozilla.org/preferences-service;1"]
     .getService(Components.interfaces.nsIPrefService)
     .getBranch("extensions.CompactHeader.");
-
-	var buttonslist = ["Reply", "Forward", "Archive", "Junk", "Trash"];
-	var buttonsanonid = [["hdrReplyButton", "hdrReplyAllButton", "hdrReplyListButton"], 
-//												"hdrReplyDropdown", "hdrReplySubButton", "hdrReplyAllSubButtonSep",
-//												"hdrReplyAllSubButton", "hdrReplyAllDropdown", "hdrReplyAllSubButton",
-//												"hdrReplySubButton", "hdrReplyListDropdown", "hdrReplyListSubButton",
-//												"hdrReplyAllSubButton", "hdrReplySubButton"],
-											 ["hdrForwardButton"],
-											 ["archiveButton"],
-											 ["hdrJunkButton"],
-											 ["hdrTrashButton"]
-			];
-  
-// Now, for each view the message pane can generate, we need a global table
-// of headerEntries. These header entry objects are generated dynamically
-// based on the static data in the header lists (see above) and elements
-// we find in the DOM based on properties in the header lists.
-var gCoheCollapsedHeaderView = {};
-
-function coheInitializeHeaderViewTables()
-{
-  // iterate over each header in our header list array, create a header entry
-	// for it, and store it in our header table
-  var index;
-  for (index = 0; index < gCoheCollapsedHeaderList.length; index++)
+  
+  var coheIntegrateRSSLinkify = false;
+  
+  var RSSLinkify = {
+      oldSubject: null,
+      newSubject: null
+  };
+  
+  var cohe={
+    version: -1,
+    firstrun: true,
+    current: -1
+  };
+  
+  var coheFirstTime = true;
+  
+  function coheOutputSubject(headerEntry, headerValue) {
+    var subjectBox;
+    
+    if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
+      subjectBox = document.getElementById("collapsed2LsubjectOutBox")
+    } else {
+      subjectBox = document.getElementById("collapsed1LsubjectOutBox")
+    }
+    
+//    if (subjectBox) {
+//      subjectBox.setAttribute("tooltiptext", headerValue);
+//    }
+    updateHeaderValue(headerEntry, headerValue);
+  }
+  
+  function coheOutputEmailAddresses(headerEntry, emailAddresses) {
+    /* function copied from comm-1.9.1/ mail/ base/ content/ msgHdrViewOverlay.js 771135e6aaf5 */
+    if (!emailAddresses)
+      return;
+  
+    var addresses = {};
+    var fullNames = {};
+    var names = {};
+    var numAddresses =  0;
+  
+    var msgHeaderParser = Components.classes["@mozilla.org/messenger/headerparser;1"]
+                                    .getService(Components.interfaces.nsIMsgHeaderParser);
+    numAddresses = msgHeaderParser.parseHeadersWithArray(emailAddresses, addresses, names, fullNames);
+    var index = 0;
+    while (index < numAddresses)
     {
-      gCoheCollapsedHeaderView[gCoheCollapsedHeaderList[index].name] =
-        new createHeaderEntry('collapsed', gCoheCollapsedHeaderList[index]);
+      // if we want to include short/long toggle views and we have a long view, always add it.
+      // if we aren't including a short/long view OR if we are and we haven't parsed enough
+      // addresses to reach the cutoff valve yet then add it to the default (short) div.
+      var address = {};
+      address.emailAddress = addresses.value[index];
+      address.fullAddress = fullNames.value[index];
+      if (cohePrefBranch.getBoolPref("headersize.addressstyle")) {
+        address.displayName = address.emailAddress;
+        address.fullAddress = address.emailAddress;
+      } else {
+        address.displayName = names.value[index];
+      }
+      if (headerEntry.useToggle && (typeof headerEntry.enclosingBox.addAddressView == 'function')) {
+        headerEntry.enclosingBox.addAddressView(address);
+      } else {
+        updateEmailAddressNode(headerEntry.enclosingBox.emailAddressNode, address);
+      }
+      index++;
     }
-}
+  
+    if (headerEntry.useToggle && (typeof headerEntry.enclosingBox.buildViews == 'function'))
+      headerEntry.enclosingBox.buildViews();
+    //OutputEmailAddresses(headerEntry, emailAddresses);
+  }
+  
+  // Now, for each view the message pane can generate, we need a global table
+  // of headerEntries. These header entry objects are generated dynamically
+  // based on the static data in the header lists (see above) and elements
+  // we find in the DOM based on properties in the header lists.
+  var gCoheCollapsedHeaderView = {};
+  
+  function coheInitializeHeaderViewTables()
+  {
+    gCoheCollapsedHeaderView = {};
+    var index;
+  
+    if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
+      for (index = 0; index < gCoheCollapsedHeader2LListLongAddresses.length; index++) {
+        gCoheCollapsedHeaderView[gCoheCollapsedHeader2LListLongAddresses[index].name] =
+          new createHeaderEntry('collapsed2L', gCoheCollapsedHeader2LListLongAddresses[index]);
+      }
+    } else { 
+      for (index = 0; index < gCoheCollapsedHeader1LListLongAddresses.length; index++) {
+        gCoheCollapsedHeaderView[gCoheCollapsedHeader1LListLongAddresses[index].name] =
+          new createHeaderEntry('collapsed1L', gCoheCollapsedHeader1LListLongAddresses[index]);
+      }
+    }
+  
+    if (cohePrefBranch.getBoolPref("headersize.linkify")) {
+      RSSLinkify.newSubject = document.getElementById("collapsedsubjectlinkBox") || document.createElement("label");
+      RSSLinkify.newSubject.setAttribute("id", "collapsedsubjectlinkBox");
+      RSSLinkify.newSubject.setAttribute("class", "headerValue plain headerValueUrl");
+      RSSLinkify.newSubject.setAttribute("originalclass", "headerValue plain headerValueUrl");
+      RSSLinkify.newSubject.setAttribute("context", "CohecopyUrlPopup");
+      RSSLinkify.newSubject.setAttribute("keywordrelated", "true");
+      RSSLinkify.newSubject.setAttribute("readonly", "true");
+      RSSLinkify.newSubject.setAttribute("appendoriginalclass", "true");
+      RSSLinkify.newSubject.setAttribute("flex", "1");
+      if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
+        RSSLinkify.oldSubject = document.getElementById("collapsed2LsubjectBox");
+      } else {
+        RSSLinkify.oldSubject = document.getElementById("collapsed1LsubjectBox");
+      }
+      RSSLinkify.oldSubject.parentNode.insertBefore(RSSLinkify.newSubject, RSSLinkify.oldSubject);
+    }
+  }
+  
+  pub.coheOnLoadMsgHeaderPane = function() { 
+    coheInitializeHeaderViewTables();
+  
+    // Add an address book listener so we can update the header view when things
+    // change.
+    Components.classes["@mozilla.org/abmanager;1"]
+              .getService(Components.interfaces.nsIAbManager)
+              .addAddressBookListener(coheAddressBookListener,
+                                      Components.interfaces.nsIAbListener.all);
+  
+    var deckHeaderView = document.getElementById("msgHeaderViewDeck");
+  
+    gCoheCollapsedHeaderViewMode = 
+      deckHeaderView.selectedPanel == document.getElementById('collapsedHeaderView');    
+      
+    // work around XUL deck bug where collapsed header view, if it's the persisted
+    // default, wouldn't be sized properly because of the larger expanded
+    // view "stretches" the deck.
+    if (gCoheCollapsedHeaderViewMode)
+      document.getElementById('expandedHeaderView').collapsed = true;
+    else
+      document.getElementById('collapsedHeaderView').collapsed = true;
+  
+    if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
+      document.getElementById('collapsed1LHeadersBox').collapsed = true;
+      document.getElementById('collapsed2LHeadersBox').collapsed = false;
+    } else {
+      document.getElementById('collapsed1LHeadersBox').collapsed = false;
+      document.getElementById('collapsed2LHeadersBox').collapsed = true;
+    }
+      
+    if (coheFirstTime)
+    {
+      coheFirstTime = false;
+      gMessageListeners.push(coheMessageListener);
+      org.mozdev.customizeHeaderToolbar.messenger.loadToolboxData();
+      fillToolboxPalette();
+      org.mozdev.customizeHeaderToolbar.messenger.saveToolboxData();
+      var toolbox = document.getElementById("header-view-toolbox");
+      toolbox.customizeDone = function(aEvent) {
+        MailToolboxCustomizeDone(aEvent, "CustomizeHeaderToolbar");
+        document.getElementById("header-view-toolbox").removeAttribute("doCustomization");
+        enableButtons();
+        org.mozdev.customizeHeaderToolbar.pane.CHTUpdateReplyButton();
+        org.mozdev.customizeHeaderToolbar.pane.CHTUpdateJunkButton();
+        org.mozdev.compactHeader.buttons.coheToggleStar();
+        org.mozdev.customizeHeaderToolbar.messenger.saveToolboxData();
+      };
+    }
+    
+    if (cohe.firstrun) {
+      coheCheckFirstRun();
+    }
+    
+    if (cohe.firstrun || document.getElementById("hdrReplyAllButton") == null) {
+      org.mozdev.customizeHeaderToolbar.pane.CHTSetDefaultButtons();
+      cohe.firstrun = false;
+    }
+    
+    coheToggleHeaderContent();
+    setButtonStyle();
+    org.mozdev.customizeHeaderToolbar.messenger.saveToolboxData();
+  }
+  
+  var coheMessageListener = 
+  {
+    onStartHeaders: 
+    function cML_onStartHeaders () {
+        gCoheBuiltCollapsedView = false;    
+    },
+    
+    onEndHeaders: 
+    function cML_onEndHeaders() {
+      ClearHeaderView(gCoheCollapsedHeaderView);  
+      coheUpdateMessageHeaders();
+    },
+    
+    onEndAttachments: function cML_onEndAttachments(){}
+  };
+  
+  pub.coheOnUnloadMsgHeaderPane = function()
+  {
+    Components.classes["@mozilla.org/abmanager;1"]
+              .getService(Components.interfaces.nsIAbManager)
+              .removeAddressBookListener(coheAddressBookListener);
+    
+    removeEventListener('messagepane-loaded', coheOnLoadMsgHeaderPane, true);
+    removeEventListener('messagepane-unloaded', coheOnUnloadMsgHeaderPane, true);
+  }
+  
+  var coheAddressBookListener =
+  {
+    onItemAdded: function(aParentDir, aItem) {
+      coheOnAddressBookDataChanged(nsIAbListener.itemAdded,
+                               aParentDir, aItem);
+    },
+    onItemRemoved: function(aParentDir, aItem) {
+      coheOnAddressBookDataChanged(aItem instanceof nsIAbCard ?
+                               nsIAbListener.directoryItemRemoved :
+                               nsIAbListener.directoryRemoved,
+                               aParentDir, aItem);
+    },
+    
+    onItemPropertyChanged: function(aItem, aProperty, aOldValue, aNewValue) {
+      // We only need updates for card changes, address book and mailing list
+      // ones don't affect us here.
+      if (aItem instanceof Components.interfaces.nsIAbCard)
+        coheOnAddressBookDataChanged(nsIAbListener.itemChanged, null, aItem);
+    }
+  }
+  
+  function coheOnAddressBookDataChanged(aAction, aParentDir, aItem) {
+    gEmailAddressHeaderNames.forEach(function (headerName) {
+        var headerEntry = null;
+  
+        if (headerName in gCoheCollapsedHeaderView) {
+          headerEntry = gCoheCollapsedHeaderView[headerName];
+          if (headerEntry)
+            headerEntry.enclosingBox.updateExtraAddressProcessing(aAction,
+                                                                  aParentDir,
+                                                                  aItem);
+        }
+      });
+  }
+  
+  function linkifySubject(subjectValueStr) {
+    var subjectNode = document.getElementById(subjectValueStr);
+    while(subjectNode.childNodes.length > 0) {
+      subjectNode.removeChild(subjectNode.firstChild)
+    }
+    var subject = currentHeaderData['subject'].headerValue;
 
-function coheOnLoadMsgHeaderPane()
-{ 
-  coheInitializeHeaderViewTables();
+    if (regex.links.test(subject)) {
+      var text = subject;
+      /* utility function to split text and links */
+      function linkify(text) {
+        var matches = regex.links.exec(text);
+        var pre, post = null;
+        [pre, post] = text.split(matches[1]);
+        var link = document.createElement("a");
+        link.appendChild(document.createTextNode(matches[1]));
+        link.setAttribute("href", matches[1]);
+        link.setAttribute("class","text-link");
+        link.setAttribute("onclick", "org.mozdev.compactHeader.pane.subjectLinkOnClickListenter(event);");
+        return [pre,link,post];
+      }
+      /* loop through multiple possible links in the subject */
+      while(text && regex.links.test(text)) {
+        var pre, link, post = null;
+        [pre,link,post] = linkify(text);
+        /* we can't assume that any pre or post text was given, only a link */
+        if (pre && pre.length > 0)
+          subjectNode.appendChild(document.createTextNode(pre));
+        subjectNode.appendChild(link);
+        text = post;
+      }
+      if (text && text.length > 0)
+        subjectNode.appendChild(document.createTextNode(text));
+    } else {
+      subjectNode.appendChild(document.createTextNode(subject));
+    }
+  }
 
-  // Add an address book listener so we can update the header view when things
-  // change.
-  Components.classes["@mozilla.org/abmanager;1"]
-            .getService(Components.interfaces.nsIAbManager)
-            .addAddressBookListener(coheAddressBookListener,
-                                    Components.interfaces.nsIAbListener.all);
+  /* :::: Subject Link onClick Listener Functions :::: */
+  pub.subjectLinkOnClickListenter = function(event) {
+    if (event.originalTarget && event.originalTarget.getAttribute("href")) {
+      try {
+        messenger.launchExternalURL(event.originalTarget.getAttribute("href"));
+      } catch (e) { Application.console.log(e); }
+    }
+  }
 
-  var deckHeaderView = document.getElementById("msgHeaderViewDeck");
-  
-  gCoheCollapsedHeaderViewMode = 
-	  deckHeaderView.selectedPanel == document.getElementById('collapsedHeaderView');	  
-	  
-  // work around XUL deck bug where collapsed header view, if it's the persisted
-  // default, wouldn't be sized properly because of the larger expanded
-  // view "stretches" the deck.
-  if (gCoheCollapsedHeaderViewMode)
-    document.getElementById('expandedHeaderView').collapsed = true;
-  else
-    document.getElementById('collapsedHeaderView').collapsed = true;
+  
+  // make sure the appropriate fields within the currently displayed view header mode
+  // are collapsed or visible...
+  function coheUpdateHeaderView()
+  {
+    if (gCoheCollapsedHeaderViewMode)
+      showHeaderView(gCoheCollapsedHeaderView);
+  
+    if (cohePrefBranch.getBoolPref("headersize.linkify")) {
+      var url = currentHeaderData["content-base"];
+      if(url) {
+          RSSLinkify.newSubject.setAttribute("onclick", "if (!event.button) messenger.launchExternalURL('" + 
+                                               url.headerValue + "');");
+          RSSLinkify.newSubject.setAttribute("value", currentHeaderData["subject"].headerValue);
+          RSSLinkify.newSubject.setAttribute("url", url.headerValue);
+          RSSLinkify.newSubject.setAttribute("collapsed", "false");
+          RSSLinkify.oldSubject.setAttribute("collapsed", "true");
+          RSSLinkify.newSubject.setAttribute("tooltiptext", url.headerValue);
+      } else {
+          RSSLinkify.newSubject.setAttribute("collapsed", "true");
+          RSSLinkify.oldSubject.setAttribute("collapsed", "false");
+          RSSLinkify.oldSubject.setAttribute("tooltiptext", currentHeaderData["subject"].headerValue);
+//          if (gCoheCollapsedHeaderViewMode) {
+//            //linkifySubject('collapsed1LsubjectBox');
+//          }
+//          else {
+//            linkifySubject('expandedsubjectBox');
+//          }
+      }
+    } else {
+      if (RSSLinkify.newSubject) {
+        RSSLinkify.newSubject.setAttribute("collapsed", "true");
+      }
+      if (RSSLinkify.oldSubject) {
+        RSSLinkify.oldSubject.setAttribute("collapsed", "false");
+        RSSLinkify.oldSubject.setAttribute("tooltiptext", currentHeaderData["subject"].headerValue);
+      }
+    }
+    if (cohePrefBranch.getBoolPref("headersize.addressstyle")) {
+      selectEmailDisplayed();
+    }
+    
+    //fillToolboxPalette();
+    coheToggleHeaderContent();
+    org.mozdev.customizeHeaderToolbar.pane.CHTUpdateReplyButton();
+    org.mozdev.customizeHeaderToolbar.pane.CHTUpdateJunkButton();
+    org.mozdev.compactHeader.buttons.coheToggleStar();
+  }
+  
+  function enableButtons() {
+    var hdrToolbar = document.getElementById("header-view-toolbar");
+    if (toolbar) {
+      var buttons = hdrToolbar.querySelectorAll("[disabled*='true']");
+      for (var i=0; i<buttons.length; i++) {
+        buttons[i].removeAttribute("disabled");
+      }
+    }
+  }
+  
+  function fillToolboxPalette() {
+    var hdrToolbar = document.getElementById("header-view-toolbar");
+    var hdrToolbox = document.getElementById("header-view-toolbox");
+    var buttons = ["button-reply", "button-replyall", "button-replylist", 
+                   "button-tag", "button-forward", "button-archive", "button-file",
+                   "button-print", "button-mark", "button-starMessages",
+                   "button-newmsg", "button-goback", "button-goforward",
+                   "button-previous", "button-next", "button-compact", 
+                   "button-address", "button-stop", "button-getmsg",
+                   "button-getPartialMessages",
+                   "stylish-toolbar-button",
+                   "button-enigmail-decrypt",
+                   "RealPreviousMessage", "RealNextMessage", "SelectSMTP",
+                   "ToggleHTML", "ToggleImages", "bDeleteThread",
+                   "mailredirect-toolbarbutton",
+                   "lightningbutton-convert-to-task",
+                   "lightningbutton-convert-to-event"];
+    var currentSet=hdrToolbar.getAttribute("currentset");
+    hdrToolbar.currentSet = currentSet;
+    for (var i=0; i<buttons.length; i++) {
+      var buttonName = buttons[i];
+      var button = document.getElementById(buttonName) || 
+          document.getElementById("mail-toolbox").palette.getElementsByAttribute("id", buttonName)[0];
+      if (button) {
+        var hdrButton = button.cloneNode(true);
+        if (hdrButton) {
+          if (hdrButton.localName == "toolbaritem") {
+            var subButtons = hdrButton.querySelectorAll(".toolbarbutton-1");
+            for (var j=0; j<subButtons.length; j++) {
+              addClass(subButtons[j], "msgHeaderView-button-out");
+            }
+          } else {
+            if (hdrButton.type != "menu-button") {
+              addClass(hdrButton, "msgHeaderView-button");
+            } else {
+              addClass(hdrButton, "msgHeaderView-button-out");
+            }
+          }
+          //hdrButton.id = "hdr" + hdrButton.id;
+          hdrToolbox.palette.appendChild(hdrButton);
+  /*        var bStyle = document.defaultView.getComputedStyle(button, null);
+          hdrButton.style.MozImageRegion = bStyle.MozImageRegion;
+          hdrButton.style.listStyleImage = bStyle.listStyleImage;*/
+        }
+        if (currentSet.indexOf(buttonName)>=0) {
+          var result = hdrToolbar.insertItem(hdrButton.id);
+          currentSet = hdrToolbar.getAttribute("currentset");
+          hdrToolbar.currentSet = currentSet;
+        }
+      }
+    }
 
-  gMessageListeners.push(coheMessageListener);
-}
+    var buttonsRemove = ["hdrForwardButton", "hdrArchiveButton",
+                         "hdrReplyToSenderButton"];//, "hdrReplyButton",
+                         //"hdrReplyAllButton", "hdrReplyListButton"];
+    for (var i=0; i<buttonsRemove.length; i++) {
+      var buttonName = buttonsRemove[i];
+      var button = document.getElementById(buttonName) || 
+          document.getElementById("header-view-toolbox").palette.getElementsByAttribute("id", buttonName)[0];
+      if (button) {
+        button.setAttribute("collapsed", "true");
+      }
+    }
+    
+    var target = "hdrOtherActionsButton";
+    
+    var newParent = document.getElementById(target) || 
+        document.getElementById("header-view-toolbox").palette.getElementsByAttribute("id", target)[0];
+  
+    if (newParent != null) {
+      var myElement;
+      myElement= document.getElementById("otherActionsPopup");
+      if (myElement) {
+        newParent.appendChild(myElement);
+      }
+    }
+  }
 
-var coheMessageListener = 
-{
-	onStartHeaders: 
-	function cML_onStartHeaders () {
-    	gCoheBuiltCollapsedView = false;		
-	},
-	
-  onEndHeaders: 
-	function cML_onEndHeaders() {
-		ClearHeaderView(gCoheCollapsedHeaderView);	
-    	coheUpdateMessageHeaders();
-	},
-	
-	onEndAttachments: function cML_onEndAttachments(){}
-};
+  function setButtonStyle() {
+    var hdrToolbar = document.getElementById("header-view-toolbar");
+    var hdrToolbox = document.getElementById("header-view-toolbox");
+    var buttons = hdrToolbar.querySelectorAll("toolbarbutton");
+    for (var i=0; i<buttons.length; i++) {
+      var button = buttons[i];
+      if (button) {
+        addClass(button, "customize-header-toolbar-button");
+        addClass(button, "customize-header-toolbar-" + button.id)
+        if (cohePrefBranch.getBoolPref("headersize.flatButtons")) {
+          if (button.type != "menu-button") {
+            addClass(button, "msgHeaderView-flat-button");
+          } else {
+            removeClass(button, "msgHeaderView-flat-button");
+            removeClass(button, "msgHeaderView-button");
+            removeClass(button, "msgHeaderView-button-out");
+            addClass(button,    "msgHeaderView-flat-button-out");
+          }
+        } else {
+          if (button.type != "menu-button") {
+            removeClass(button, "msgHeaderView-flat-button");
+          } else {
+            removeClass(button, "msgHeaderView-flat-button");
+            removeClass(button, "msgHeaderView-button");
+            removeClass(button, "msgHeaderView-flat-button-out");
+            addClass(button,    "msgHeaderView-button-out");
+          }
+        }
+      }
+    }
 
-function coheOnUnloadMsgHeaderPane()
-{
-  Components.classes["@mozilla.org/abmanager;1"]
-            .getService(Components.interfaces.nsIAbManager)
-            .removeAddressBookListener(coheAddressBookListener);
-	
-  removeEventListener('messagepane-loaded', coheOnLoadMsgHeaderPane, true);
-  removeEventListener('messagepane-unloaded', coheOnUnloadMsgHeaderPane, true);
-}
+    var buttons = hdrToolbar.querySelectorAll("toolbaritem");
+    for (var i=0; i<buttons.length; i++) {
+      var button = buttons[i];
+      if (button) {
+        addClass(button, "customize-header-toolbar-button");
+        addClass(button, "customize-header-toolbar-" + button.id)
+        if (cohePrefBranch.getBoolPref("headersize.flatButtons")) {
+          removeClass(button, "msgHeaderView-button-out-item");
+          addClass(button,    "msgHeaderView-flat-button-out-item");
+        } else {
+          removeClass(button, "msgHeaderView-flat-button-out-item");
+          addClass(button,    "msgHeaderView-button-out-item");
+        }
+      }
+    }
+    
+    buttons = hdrToolbox.palette.querySelectorAll("toolbarbutton");
+    for (var i=0; i<buttons.length; i++) {
+      var button = buttons[i];
+      if (button) {
+        addClass(button, "customize-header-toolbar-button");
+        addClass(button, "customize-header-toolbar-" + button.id)
+        if (cohePrefBranch.getBoolPref("headersize.flatButtons")) {
+          if (button.getAttribute("type") != "menu-button") {
+            addClass(button, "msgHeaderView-flat-button");
+          } else {
+            removeClass(button, "msgHeaderView-flat-button");
+            removeClass(button, "msgHeaderView-button");
+            removeClass(button, "msgHeaderView-button-out");
+            addClass(button,    "msgHeaderView-flat-button-out");
+          }
+        } else {
+          if (button.getAttribute("type") != "menu-button") {
+            removeClass(button, "msgHeaderView-flat-button");
+          } else {
+            removeClass(button, "msgHeaderView-flat-button");
+            removeClass(button, "msgHeaderView-button");
+            removeClass(button, "msgHeaderView-flat-button-out");
+            addClass(button,    "msgHeaderView-button-out");
+          }
+        }
+      }
+    }
 
-var coheAddressBookListener =
-{
-  onItemAdded: function(aParentDir, aItem) {
-    coheOnAddressBookDataChanged(nsIAbListener.itemAdded,
-                             aParentDir, aItem);
-  },
-  onItemRemoved: function(aParentDir, aItem) {
-    coheOnAddressBookDataChanged(aItem instanceof nsIAbCard ?
-                             nsIAbListener.directoryItemRemoved :
-                             nsIAbListener.directoryRemoved,
-                             aParentDir, aItem);
-  },
-	
-  onItemPropertyChanged: function(aItem, aProperty, aOldValue, aNewValue) {
-    // We only need updates for card changes, address book and mailing list
-    // ones don't affect us here.
-    if (aItem instanceof Components.interfaces.nsIAbCard)
-      coheOnAddressBookDataChanged(nsIAbListener.itemChanged, null, aItem);
+    buttons = hdrToolbox.palette.querySelectorAll("toolbaritem");
+    for (var i=0; i<buttons.length; i++) {
+      var button = buttons[i];
+      if (button) {
+        addClass(button, "customize-header-toolbar-button");
+        addClass(button, "customize-header-toolbar-" + button.id)
+        if (cohePrefBranch.getBoolPref("headersize.flatButtons")) {
+          removeClass(button, "msgHeaderView-button-out-item");
+          addClass(button,    "msgHeaderView-flat-button-out-item");
+        } else {
+          removeClass(button, "msgHeaderView-flat-button-out-item");
+          addClass(button,    "msgHeaderView-button-out-item");
+        }
+      }
+    }
   }
-}
 
-function coheOnAddressBookDataChanged(aAction, aParentDir, aItem) {
-  gEmailAddressHeaderNames.forEach(function (headerName) {
-      var headerEntry = null;
-
-      if (headerName in gCoheCollapsedHeaderView) {
-        headerEntry = gCoheCollapsedHeaderView[headerName];
-        if (headerEntry)
-          headerEntry.enclosingBox.updateExtraAddressProcessing(aAction,
-                                                                aParentDir,
-                                                                aItem);
+  pub.coheToggleHeaderView = function() {
+    gCoheCollapsedHeaderViewMode = !gCoheCollapsedHeaderViewMode;
+    
+    let deck = document.getElementById('msgHeaderViewDeck');
+    // Work around a xul deck bug where the height of the deck is determined
+    // by the tallest panel in the deck even if that panel is not selected...
+    deck.selectedPanel.collapsed = true;
+  
+    if (gCoheCollapsedHeaderViewMode) {
+      deck.selectedPanel = document.getElementById("collapsedHeaderView")
+      coheUpdateMessageHeaders();
+    } else {
+      deck.selectedPanel = document.getElementById("expandedHeaderView");
+      ClearHeaderView(gExpandedHeaderView);
+      UpdateExpandedMessageHeaders();
+      //gDBView.reloadMessage();
+    }
+    
+    // Work around a xul deck bug where the height of the deck is determined
+    // by the tallest panel in the deck even if that panel is not selected...
+    deck.selectedPanel.collapsed = false;
+    syncGridColumnWidths();
+    
+    coheToggleHeaderContent();
+  }
+  
+  function coheToggleHeaderContent() {
+    var strHideLabel = document.getElementById("CoheHideDetailsLabel").value;
+    var strShowLabel = document.getElementById("CoheShowDetailsLabel").value;
+    var strLabel;
+    
+    var smimeBox = document.getElementById("smimeBox");
+    
+    if (smimeBox != null) {
+      if (gCoheCollapsedHeaderViewMode) {
+        var parent = document.getElementById("collapsed2LdateOutBox");
+        var refElement = document.getElementById("collapsed2LdateRow");
+        if (parent != null && refElement != null) {
+          parent.insertBefore(smimeBox, refElement);
+        }
+      }
+      else {
+        var parent = document.getElementById("dateValueBox");
+        var refElement = document.getElementById("dateLabel");
+        if (parent != null && refElement != null) {
+          parent.insertBefore(smimeBox, refElement);
+        }
+      }
+    }    
+    
+    var dispMUABox = document.getElementById("dispMUA");
+    
+    if (dispMUABox != null) {
+      if (gCoheCollapsedHeaderViewMode) {
+        var parent = document.getElementById("collapsed2LdateOutBox");
+        var refElement = document.getElementById("collapsed2LdateRow");
+        if (parent != null && refElement != null) {
+          parent.insertBefore(dispMUABox, refElement);
+        }
       }
-    });
-}
+      else {
+        var parent = document.getElementById("dateValueBox");
+        var refElement = document.getElementById("dateLabel");
+        if (parent != null && refElement != null) {
+          parent.insertBefore(dispMUABox, refElement);
+        }
+      }
+    }    
 
-// make sure the appropriate fields within the currently displayed view header mode
-// are collapsed or visible...
-function coheUpdateHeaderView()
-{
-	if (gCoheCollapsedHeaderViewMode)
-  		showHeaderView(gCoheCollapsedHeaderView);
- 	
-  	UpdateJunkButton();
-  	updateHdrButtons();
-}
+    org.mozdev.customizeHeaderToolbar.messenger.loadToolboxData();
 
-function coheToggleHeaderView ()
-{
-  gCoheCollapsedHeaderViewMode = !gCoheCollapsedHeaderViewMode;
-	
-	let deck = document.getElementById('msgHeaderViewDeck');
-  // Work around a xul deck bug where the height of the deck is determined
-	// by the tallest panel in the deck even if that panel is not selected...
-  deck.selectedPanel.collapsed = true;
+    if (gCoheCollapsedHeaderViewMode) {
+      strLabel = strShowLabel;
+    } else {
+      strLabel = strHideLabel;
+    }
 
-  if (gCoheCollapsedHeaderViewMode) {
-    deck.selectedPanel = document.getElementById("collapsedHeaderView")
-    coheUpdateMessageHeaders();
-  } else {
-    deck.selectedPanel = document.getElementById("expandedHeaderView");
-    ClearHeaderView(gExpandedHeaderView);
-    UpdateExpandedMessageHeaders();
-  }
+    if (document.getElementById("hideDetailsMenu")) {
+      document.getElementById("hideDetailsMenu").setAttribute("label", strLabel);
+    }
 
-  updateHdrButtons();
+    var hdrToolbox = document.getElementById("header-view-toolbox");
+    var hdrToolbar = document.getElementById("header-view-toolbar");
+    var firstPermanentChild = hdrToolbar.firstPermanentChild;
+    var lastPermanentChild = hdrToolbar.lastPermanentChild;
+    if (gCoheCollapsedHeaderViewMode) {
+      strLabel = strShowLabel;
+      var cBox = document.getElementById("collapsed2LButtonBox");
+      if (cBox.parentNode.id != hdrToolbox.parentNode.id) {
+        var cloneToolboxPalette;
+        var cloneToolbarset;
+        if (hdrToolbox.palette) {
+          cloneToolboxPalette = hdrToolbox.palette.cloneNode(true);
+        }
+        if (hdrToolbox.toolbarset) {
+          cloneToolbarset = hdrToolbox.toolbarset.cloneNode(true);
+        }
+        cBox.parentNode.insertBefore(hdrToolbox, cBox);
+        hdrToolbox.palette  = cloneToolboxPalette;
+        hdrToolbox.toolbarset = cloneToolbarset;
+        hdrToolbar = document.getElementById("header-view-toolbar");
+        hdrToolbar.firstPermanentChild = firstPermanentChild;
+        hdrToolbar.lastPermanentChild = lastPermanentChild;
+      }
+    } else {
+      strLabel = strHideLabel;
+      var cBox = document.getElementById("expandedHeaders");
+      if (cBox.parentNode.id != hdrToolbox.parentNode.id) {
+        var cloneToolboxPalette;
+        var cloneToolbarset;
+        if (hdrToolbox.palette) {
+          cloneToolboxPalette = hdrToolbox.palette.cloneNode(true);
+        }
+        if (hdrToolbox.toolbarset) {
+          cloneToolbarset = hdrToolbox.toolbarset.cloneNode(true);
+        }
+        cBox.parentNode.appendChild(hdrToolbox);
+        hdrToolbox.palette = cloneToolboxPalette;
+        hdrToolbox.toolbarset = cloneToolbarset;
+        hdrToolbar = document.getElementById("header-view-toolbar");
+        hdrToolbar.firstPermanentChild = firstPermanentChild;
+        hdrToolbar.lastPermanentChild = lastPermanentChild;
+      }
+    }
+    
+    if (document.getElementById("hideDetailsMenu")) {
+      document.getElementById("hideDetailsMenu").setAttribute("label", strLabel);
+    }
+  }
   
-  // Work around a xul deck bug where the height of the deck is determined
-	// by the tallest panel in the deck even if that panel is not selected...
-  deck.selectedPanel.collapsed = false;
-}
-
-// default method for updating a header value into a header entry
-function coheUpdateHeaderValueInTextNode(headerEntry, headerValue)
-{
-  headerEntry.textNode.value = headerValue;
-}
-
-// coheUpdateMessageHeaders: Iterate through all the current header data we received from mime for this message
-// for each header entry table, see if we have a corresponding entry for that header. i.e. does the particular
-// view care about this header value. if it does then call updateHeaderEntry
-function coheUpdateMessageHeaders()
-{
-  // Remove the height attr so that it redraws correctly. Works around a
-	// problem that attachment-splitter causes if it's moved high enough to
-	// affect the header box:
-  document.getElementById('msgHeaderView').removeAttribute('height');
-	
-  // iterate over each header we received and see if we have a matching entry
-	// in each header view table...
-  for (var headerName in currentHeaderData)
+  // default method for updating a header value into a header entry
+  function coheUpdateHeaderValueInTextNode(headerEntry, headerValue)
   {
-    var headerField = currentHeaderData[headerName];
-    var headerEntry = null;
-
-    if (gCoheCollapsedHeaderViewMode && !gCoheBuiltCollapsedView)
+    headerEntry.textNode.value = headerValue;
+  }
+  
+  function coheUpdateDateValue(headerEntry, headerValue) {
+    //var t = currentHeaderData.date.headerValue;
+    var d
+    d = document.getElementById("collapsed1LdateBox");
+    d.textContent = headerValue;
+    d = document.getElementById("collapsed2LdateBox");
+    d.textContent = headerValue;
+  }
+  
+  
+  // coheUpdateMessageHeaders: Iterate through all the current header data we received from mime for this message
+  // for each header entry table, see if we have a corresponding entry for that header. i.e. does the particular
+  // view care about this header value. if it does then call updateHeaderEntry
+  function coheUpdateMessageHeaders()
+  {
+    // Remove the height attr so that it redraws correctly. Works around a
+    // problem that attachment-splitter causes if it's moved high enough to
+    // affect the header box:
+    document.getElementById('msgHeaderView').removeAttribute('height');
+    
+    // iterate over each header we received and see if we have a matching entry
+    // in each header view table...
+    for (var headerName in currentHeaderData)
     {
-      if (headerName == "cc" || headerName == "to" || headerName == "bcc")
-        headerEntry = gCoheCollapsedHeaderView["toCcBcc"];
-      else if (headerName in gCoheCollapsedHeaderView)
-        headerEntry = gCoheCollapsedHeaderView[headerName];
+      var headerField = currentHeaderData[headerName];
+      var headerEntry = null;
+  
+      if (gCoheCollapsedHeaderViewMode && !gCoheBuiltCollapsedView)
+      {
+        if (headerName == "cc" || headerName == "to" || headerName == "bcc")
+          headerEntry = gCoheCollapsedHeaderView["toCcBcc"];
+        else if (headerName in gCoheCollapsedHeaderView)
+          headerEntry = gCoheCollapsedHeaderView[headerName];
+      }
+  
+      if (headerEntry) {
+        headerEntry.outputFunction(headerEntry, headerField.headerValue);
+        headerEntry.valid = true;
+      }
     }
-
-    if (headerEntry) {
-      headerEntry.outputFunction(headerEntry, headerField.headerValue);
-      headerEntry.valid = true;
+  
+    if (gCoheCollapsedHeaderViewMode)
+     gCoheBuiltCollapsedView = true;
+  
+    // now update the view to make sure the right elements are visible
+    coheUpdateHeaderView();
+  }
+  
+  function addClass(el, strClass) {
+    var testnew = new RegExp('\\b'+strClass+'\\b').test(el.className);  
+    if (!testnew) {
+      el.className += el.className?' '+strClass:strClass;
     }
   }
-
-  if (gCoheCollapsedHeaderViewMode)
-   gCoheBuiltCollapsedView = true;
-
-  // now update the view to make sure the right elements are visible
-  coheUpdateHeaderView();
-}
-
-addEventListener('messagepane-loaded', coheOnLoadMsgHeaderPane, true);
-addEventListener('messagepane-unloaded', coheOnUnloadMsgHeaderPane, true);
-
-function updateHdrButtons() {
-	UpdateReplyButtons();
-  for(var i = 0; i<buttonslist.length; i++) {
-	  var buttonBox = document.getElementById('msgHeaderViewDeck').selectedPanel
-										.getElementsByTagName("header-view-button-box").item(0);
-	  for (var j=0; j<buttonsanonid[i].length; j++){
-	  	var myElement = buttonBox.getButton(buttonsanonid[i][j]);
-	  	if (myElement != null) {
-	  		if (prefBranch.getBoolPref("expandedview.display" + buttonslist[i])) {
-		  		if (buttonslist[i] != "Reply") {
-			  		myElement.hidden =  ! prefBranch.getBoolPref("expandedview.display" + buttonslist[i]);
-		  		}
-		  	}
-		  	else {
-		  		myElement.hidden =  ! prefBranch.getBoolPref("expandedview.display" + buttonslist[i]);
-		  	}
-	  	}
-	  }
+  
+  function removeClass(el, strClass) {
+    var str = new RegExp('(\\s|^)'+strClass+'(\\s|$)', 'g');
+    el.className = el.className.replace(str, ' ');
   }
-}
-
-var myPrefObserver =
-{
-  register: function()
+  
+  function CoheCopyWebsiteAddress(websiteAddressNode)
   {
-    // First we'll need the preference services to look for preferences.
-    var prefService = Components.classes["@mozilla.org/preferences-service;1"]
-                                .getService(Components.interfaces.nsIPrefService);
-
-    // For this._branch we ask that the preferences for extensions.myextension. and children
-    this._branch = prefService.getBranch("extensions.CompactHeader.");
-
-    // Now we queue the interface called nsIPrefBranch2. This interface is described as:  
-    // "nsIPrefBranch2 allows clients to observe changes to pref values."
-    this._branch.QueryInterface(Components.interfaces.nsIPrefBranch2);
-
-    // Finally add the observer.
-    this._branch.addObserver("", this, false);
-  },
-
-  unregister: function()
+    if (websiteAddressNode)
+    {
+      var websiteAddress = websiteAddressNode.getAttribute("url");
+  
+      var contractid = "@mozilla.org/widget/clipboardhelper;1";
+      var iid = Components.interfaces.nsIClipboardHelper;
+      var clipboard = Components.classes[contractid].getService(iid);
+      clipboard.copyString(websiteAddress);
+    }
+  }
+  
+  function selectEmailDisplayed() {
+    var xulemail = document.getElementById("collapsedtoCcBccBox");
+    if (xulemail != null) {
+      var nextbox = document.getAnonymousElementByAttribute(xulemail, "anonid", "longEmailAddresses");
+      if (nextbox != null) {
+        var xuldesc = document.getAnonymousElementByAttribute(xulemail, "containsEmail", "true");
+        if (xuldesc != null) {
+          var children = xuldesc.children;
+          for (var i=0; i<children.length; i++) {
+            if (children[i].localName == "mail-emailaddress") {
+              var rawAddress = children[i].getAttribute("emailAddress");
+              if (rawAddress) {
+                children[i].setAttribute("label", rawAddress);
+              }
+            }
+          }
+        }
+      }
+    }
+    var xulemail = document.getElementById("collapsedfromBox");
+    if (xulemail != null) {
+      var nextbox = document.getAnonymousElementByAttribute(xulemail, "anonid", "longEmailAddresses");
+      if (nextbox != null) {
+        var xuldesc = document.getAnonymousElementByAttribute(xulemail, "containsEmail", "true");
+        if (xuldesc != null) {
+          var children = xuldesc.children;
+          for (var i=0; i<children.length; i++) {
+            if (children[i].localName == "mail-emailaddress") {
+              var rawAddress = children[i].getAttribute("emailAddress");
+              if (rawAddress) {
+                children[i].setAttribute("label", rawAddress);
+              }
+            }
+          }
+        }
+      }
+    }
+  };
+  
+  var myPrefObserverHeaderSize =
   {
-    if(!this._branch) return;
-    this._branch.removeObserver("", this);
-  },
+    register: function()
+    {
+      // First we'll need the preference services to look for preferences.
+      var prefService = Components.classes["@mozilla.org/preferences-service;1"]
+                                  .getService(Components.interfaces.nsIPrefService);
+  
+      // For this._branch we ask that the preferences for extensions.myextension. and children
+      this._branch = prefService.getBranch("extensions.CompactHeader.headersize.");
+  
+      // Now we queue the interface called nsIPrefBranch2. This interface is described as:  
+      // "nsIPrefBranch2 allows clients to observe changes to pref values."
+      this._branch.QueryInterface(Components.interfaces.nsIPrefBranch2);
+  
+      // Finally add the observer.
+      this._branch.addObserver("", this, false);
+    },
+  
+    unregister: function()
+    {
+      if(!this._branch) return;
+      this._branch.removeObserver("", this);
+    },
+  
+    observe: function(aSubject, aTopic, aData)
+    {
+      if(aTopic != "nsPref:changed") return;
+      // aSubject is the nsIPrefBranch we're observing (after appropriate QI)
+      // aData is the name of the pref that's been changed (relative to aSubject)
+  
+      var event = document.createEvent('Events');
+      event.initEvent('messagepane-loaded', false, true);
+      var headerViewElement = document.getElementById("msgHeaderView");
+      headerViewElement.dispatchEvent(event);
+  
+      gDBView.reloadMessage();
+    }
+  }
+  
+  myPrefObserverHeaderSize.register();
+  
+  function coheCheckFirstRun() {
+    var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
+                                     .getService(Components.interfaces.nsIXULAppInfo);
+    var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
+                                            .getService(Components.interfaces.nsIVersionComparator);
+//    debugLog("first run 0");
+    if(versionChecker.compare(appInfo.version, "3.2a1pre") < 0) {
+//      debugLog("firstrun 1");
+    cohe.version = -1;
+    cohe.firstrun = false;
+    cohe.gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
+    // check if this is part of CompactHeader
+    if ((cohe.gExtensionManager.getItemForID(COHE_EXTENSION_UUID) == null) || (isAddonDisabled(COHE_EXTENSION_UUID))) {
+      return;
+    }
+    
+    cohe.current = cohe.gExtensionManager.getItemForID(COHE_EXTENSION_UUID).version;
+    try{
+      cohe.version = cohePrefBranch.getCharPref("version");
+      cohe.firstrun = cohePrefBranch.getBoolPref("firstrun");
+    } catch(e) {
+    } finally {
+      //check for first run
+      if (cohe.firstrun){
+        cohePrefBranch.setBoolPref("firstrun",false);
+        cohePrefBranch.setCharPref("version",cohe.current);
+      }
+      //check for upgrade
+      if (cohe.version!=cohe.current && !cohe.firstrun){
+        cohePrefBranch.setCharPref("version",cohe.current);
+        // XXX
+      }
+    }
+  }
+    else {
+      //debugLog("firstrun 3");
+      Components.utils.import("resource://gre/modules/AddonManager.jsm");
+      AddonManager.getAddonByID(COHE_EXTENSION_UUID,
+        function(myAddon) {
+//          debugLog("first run 2");
+          cohe.version = -1;
+          cohe.firstrun = false;
+          cohe.current = myAddon.version;
+          try{
+            cohe.version = cohePrefBranch.getCharPref("version");
+            cohe.firstrun = cohePrefBranch.getBoolPref("firstrun");
+          } catch(e) {
+          } finally {
+            //check for first run
+            if (cohe.firstrun){
+              cohePrefBranch.setBoolPref("firstrun",false);
+              cohePrefBranch.setCharPref("version",cohe.current);
+            }
+            //check for upgrade
+            if (cohe.version!=cohe.current && !cohe.firstrun){
+              cohePrefBranch.setCharPref("version",cohe.current);
+              // XXX
+            }
+          }
+        }
+      );
+    }
+//    debugLog("firstrun 4");
+  }
 
-  observe: function(aSubject, aTopic, aData)
-  {
-    if(aTopic != "nsPref:changed") return;
-    // aSubject is the nsIPrefBranch we're observing (after appropriate QI)
-    // aData is the name of the pref that's been changed (relative to aSubject)
 
-    updateHdrButtons();
+//  var aConsoleService = Components.classes["@mozilla.org/consoleservice;1"]
+//                                           .getService(Components.interfaces.nsIConsoleService);
+  
+  pub.coheInitializeOverlay = function() {
+    // var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
+    // check if this is part of CompactHeader
+    // if ((gExtensionManager.getItemForID(COHE_EXTENSION_UUID) == null) || isAddonDisabled(COHE_EXTENSION_UUID)) {
+    //  return;
+    //}
+    coheUninstallObserver.register();
+  }
+  
+  var coheUninstallObserver = {
+    _uninstall : false,
+    observe : function(subject, topic, data) {
+      if (topic == "em-action-requested") {
+        subject.QueryInterface(Components.interfaces.nsIUpdateItem);
+    
+        if (subject.id == COHE_EXTENSION_UUID) {
+          if (data == "item-uninstalled") {
+            this._uninstall = true;
+          } else if (data == "item-cancel-action") {
+            this._uninstall = false;
+          }
+        }
+      } else if (topic == "quit-application-granted") {
+        if (this._uninstall) {
+          cohePrefBranch.deleteBranch("");
+          org.mozdev.customizeHeaderToolbar.pane.CHTCleanupButtons();
+        }
+        this.unregister();
+      }
+    },
+    register : function() {
+     var observerService =
+       Components.classes["@mozilla.org/observer-service;1"].
+         getService(Components.interfaces.nsIObserverService);
+    
+     observerService.addObserver(this, "em-action-requested", false);
+     observerService.addObserver(this, "quit-application-granted", false);
+    },
+    unregister : function() {
+      var observerService =
+        Components.classes["@mozilla.org/observer-service;1"].
+          getService(Components.interfaces.nsIObserverService);
     
-    /*
-    switch (aData) {
-      case "pref1":
-        // extensions.myextension.pref1 was changed
-        break;
-      case "pref2":
-        // extensions.myextension.pref2 was changed
-        break;
-    }
-    */
+      observerService.removeObserver(this,"em-action-requested");
+      observerService.removeObserver(this,"quit-application-granted");
+    }
   }
-}
-myPrefObserver.register();
+  
+  function isAddonDisabled(uuid) {
+    var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
+    var addon = rdfService.GetResource("urn:mozilla:item:" + uuid);
+  
+    var em = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
+    var ds = em.datasource;
+  
+    var appRes = rdfService.GetResource("http://www.mozilla.org/2004/em-rdf#appDisabled");
+    var appDisabled = ds.GetTarget(addon, appRes, true);
+    if(appDisabled instanceof Components.interfaces.nsIRDFLiteral && appDisabled.Value == "true")
+      return true;
+  
+    var userRes = rdfService.GetResource("http://www.mozilla.org/2004/em-rdf#userDisabled");
+    var userDisabled = ds.GetTarget(addon, userRes, true);
+    if(userDisabled instanceof Components.interfaces.nsIRDFLiteral && userDisabled.Value == "true")
+      return true;
+  
+    return false;
+  }
+  return pub;
+}();
+
+addEventListener('messagepane-loaded', org.mozdev.compactHeader.pane.coheOnLoadMsgHeaderPane, true);
+addEventListener('messagepane-unloaded', org.mozdev.compactHeader.pane.coheOnUnloadMsgHeaderPane, true);
+addEventListener('load', org.mozdev.compactHeader.pane.coheInitializeOverlay, false);
+  
diff --git a/chrome/CompactHeader/content/compactHeaderOverlay.xul b/chrome/CompactHeader/content/compactHeaderOverlay.xul
index 62f166f..39b74c9 100644
--- a/chrome/CompactHeader/content/compactHeaderOverlay.xul
+++ b/chrome/CompactHeader/content/compactHeaderOverlay.xul
@@ -2,74 +2,222 @@
 
 <!DOCTYPE overlay [
   <!ENTITY % msgHeaderDTD SYSTEM 
-	"chrome://messenger/locale/msgHdrViewOverlay.dtd"> 
-	%msgHeaderDTD;
-	<!ENTITY % compactHeaderDTD SYSTEM
-	"chrome://CompactHeader/locale/CompactHeader.dtd">
-	%compactHeaderDTD;
+  "chrome://messenger/locale/msgHdrViewOverlay.dtd"> 
+  %msgHeaderDTD;
+  <!ENTITY % compactHeaderDTD SYSTEM
+  "chrome://CompactHeader/locale/CompactHeader.dtd">
+  %compactHeaderDTD;
+  <!ENTITY % preferencesDTD SYSTEM
+  "chrome://CompactHeader/locale/preferences.dtd">
+  %preferencesDTD;
+  <!ENTITY % messengerDTD SYSTEM "chrome://messenger/locale/messenger.dtd">
+  %messengerDTD;
 ]>
 
 <?xml-stylesheet href="chrome://CompactHeader/skin/CompactHeader.css" type="text/css"?>
+<?xml-stylesheet href="chrome://CompactHeader-os/skin/osdef.css" type="text/css"?>
+
 
 <overlay id="compactHeaderOverlay"
          xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
-  <script type="application/javascript"
-          src="chrome://CompactHeader/content/compactHeaderOverlay.js"/>
+  <script type="application/javascript" src="chrome://CompactHeader-d/content/compactHeaderOverlay.js"/>
+
+  <keyset>
+    <key id="hideDetailsKey" 
+         modifiers="shift" 
+         key="&toggleDetails.key;"
+         oncommand="org.mozdev.compactHeader.pane.coheToggleHeaderView();"/>
+  </keyset>
+
+  <popup id="header-toolbar-context-menu">
+    <menuitem id="hidecohePreferencesButton" 
+              label="&dialog.title;"
+              oncommand="openDialog('chrome://CompactHeader/content/preferences.xul', 'prefs', 'chrome,resizable=no,centerscreen,modal');"/>
+  </popup>
 
   <deck id="msgHeaderViewDeck">
 
-	<!-- YYY namespace ids added here? -->
-	<hbox id="expandedHeaderView">
-		<vbox id="hideDetailsButtonID" insertbefore="expandedHeaders">
-			<button id="hideDetailsButton"  
-							tooltiptext="&hideDetailsButton.label;"
-							onclick="coheToggleHeaderView();" 
-							class="msgHeaderView-button msgHeaderView-flat-button"/>
-	  </vbox>
-		<vbox id="expandedHeaders" flex="1">
-			<hbox id="otherHeadersAndButtonsBox" flex="1">
-				<vbox id="otherActionsBox" align="end">
-					<button type="menu" id="otherActionsButton"
-							label="&otherActionsButton.label;"
-	                        class="msgHeaderView-button msgHeaderView-flat-button">
-						<menupopup id="otherActionsPopup">
-							<menuitem id="hideDetailsMenu" label="&hideDetailsButton.label;"
-							                               oncommand="coheToggleHeaderView();" />
-						</menupopup>
-					</button>
-				</vbox>
-			</hbox>
-		</vbox>
-	</hbox>
-
-  <vbox id="collapsedHeaderView" class="header-part1 headerContainer" flex="2" pack="start">
-
-    <hbox align="start">
-      <hbox id="showDetailsButtonBox" align="start">
-		    <button id="showDetailsButton"
-			          tooltiptext="&showDetailsButton.label;"
-			          onclick="coheToggleHeaderView();"
-			          class="msgHeaderView-button msgHeaderView-flat-button"/>
-	    </hbox>
-	    <hbox align="baseline" flex="2">
-			  <hbox id="collapsedsubjectBox" align="start" flex="1">
-			    <textbox id="collapsedsubjectValue" flex="1" readonly="true" class="collapsedHeaderValue plain"/>
-			  </hbox>
-			  <hbox id="collapsedfromBox" align="end">
-			    <mail-multi-emailHeaderField id="collapsedfromValue"
-			                                 class="collapsedHeaderDisplayName"
-			                                 label="&fromField2.label;"/>
-			  </hbox>
-			  <hbox id="collapseddateBox" align="end">
-			    <textbox id="collapseddateValue" class="collapsedHeaderValue plain" readonly="true"/>
-			  </hbox>
-			  <header-view-button-box id="collapsedButtonBox" style="display:none"/>
-	    </hbox>
+  <vbox id="expandedHeaderView" orient="horizontal">
+    <vbox id="hideDetailsButtonBox" insertbefore="expandedHeadersBox">
+      <button id="hideDetailsButton"  
+              tooltiptext="&hideDetailsButton.label;"
+              onclick="org.mozdev.compactHeader.pane.coheToggleHeaderView();" 
+              class="msgHeaderView-flat-button"/>
+    </vbox>
+
+    <hbox id="coheStringTransferBox" hidden="true">
+      <label id="CoheHideDetailsLabel" value="&hideDetailsButton.label;"/>
+      <label id="CoheShowDetailsLabel" value="&showDetailsButton.label;"/>
     </hbox>
-  
-  </vbox>			
 
-	</deck>
+    <vbox id="expandedHeadersBox">  
+      <hbox id="expandedHeadersTopBox" flex="1">
+        <toolbox id="header-view-toolbox"
+                 mode="icons"
+                 defaultmode="icons">
+          <toolbarpalette id="header-view-toolbar-palette">
+            <toolbarbutton id="hdrOtherActionsButton"
+                           label="&otherActionsButton.label;"
+                           tooltiptext="&otherActionsButton.label;"
+                           class="toolbarbutton-1 msgHeaderView-button hdrOtherActionsButton"
+                           type="menu"/>
+          </toolbarpalette>
+          <toolbar id="header-view-toolbar"
+                   mode="icons" defaultmode="icons"
+                   defaultset="hdrReplyToSenderButton,hdrReplyButton,hdrReplyAllButton,hdrReplyListButton,hdrForwardButton,button-reply,button-forward,hdrArchiveButton,hdrJunkButton,hdrTrashButton,hdrOtherActionsButton">
+          </toolbar>
+        </toolbox>
+      </hbox>
+
+
+      <hbox id="expandedHeadersBottomBox">
+      
+        <vbox id="otherActionsBox" flex="0">
+          <hbox id="dateValueBox" flex="0"/>
+          <button type="menu" id="otherActionsButton" collapsed="true"
+                  label="&otherActionsButton.label;"
+                  class="msgHeaderView-button msgHeaderView-flat-button">
+            <menupopup id="otherActionsPopup" onpopupshowing="InitMessageMark()">
+              <menuitem id="hdrPlane-markFlagged"
+                        type="checkbox"
+                        label="&markStarredCmd.label;"
+                        accesskey="&markStarredCmd.accesskey;"
+                        command="cmd_markAsFlagged"
+                        insertbefore="viewSourceMenuItem"
+                        key="key_toggleFlagged"/>
+              <menu id="hdrPlane-HeadersPopupMenu" label="&headersMenu.label;" accesskey="&headersMenu.accesskey;">
+                <menupopup id="menu_HeadersPopup" onpopupshowing="InitViewHeadersMenu();">
+                  <menuitem id="hdrPlane-viewallheaders"
+                   type="radio"
+                   name="viewheadergroup"
+                   label="&headersAllCmd.label;"
+                   accesskey="&headersAllCmd.accesskey;"
+                   command="cmd_viewAllHeader"/>
+                  <menuitem id="hdrPlane-viewnormalheaders"
+                   type="radio"
+                   name="viewheadergroup"
+                   label="&headersNormalCmd.label;"
+                   accesskey="&headersNormalCmd.accesskey;"
+                   command="cmd_viewNormalHeader"/>
+                </menupopup>
+              </menu>
+              <menuseparator id="otherActionPopupAfterViewSource"/>
+              <menuitem id="hideDetailsMenu" 
+                        label="&hideDetailsButton.label;"
+                        oncommand="org.mozdev.compactHeader.pane.coheToggleHeaderView();"/>
+              <menuitem id="hidecohePreferencesButton" 
+                        label="&dialog.title;"
+                        oncommand="openDialog('chrome://CompactHeader/content/preferences.xul', 'prefs', 'chrome,centerscreen,dependent,all,resizable=no');"/>
+            </menupopup>
+          </button>
+        </vbox>
+      </hbox>
+      
+    </vbox>
+  </vbox>
+
+  <vbox id="collapsedHeaderView" orient="horizontal" flex="1">
+    <popup id="CohecopyUrlPopup" popupanchor="bottomleft">
+      <menuitem label="&copyLinkCmd.label;" accesskey="&copyLinkCmd.accesskey;" oncommand="CoheCopyWebsiteAddress(document.popupNode)"/>
+    </popup>
+    <vbox id="showDetailsButtonBox" align="start" flex="0">
+      <button id="showDetailsButton"
+              tooltiptext="&showDetailsButton.label;"
+              onclick="org.mozdev.compactHeader.pane.coheToggleHeaderView();"
+              class="msgHeaderView-flat-button"/>
+    </vbox>
+    <vbox id="collapsed1LHeadersBox" flex="1" collapsed="false">
+      <hbox id="collapsed1LHeaderViewFirstLine" flex="0">
+        <hbox id="collapsed1LsubjectOutBox" align="start" flex="99">
+          <row id="collapsed1LsubjectRow" flex="99">
+            <mail-headerfield id="collapsed1LsubjectBox" flex="99"/>
+          </row>
+        </hbox>
+        <hbox id="collapsed1LfromOutBox" align="start" flex="0">
+          <grid flex="1">
+            <columns>
+              <column flex="0"/>
+            </columns>
+            <rows>
+              <row id="collapsed1LfromRow">
+                <mail-multi-emailHeaderField id="collapsed1LfromBox" flex="0"/>
+              </row>
+            </rows>
+          </grid>
+        </hbox>
+<!--
+        <grid id="collapsed1LtoCcBccOutBox" flex="1" hidden="true">
+          <columns>
+            <column flex="0"/>
+            <column flex="1"/>
+          </columns>
+          <row id="collapsed1LtoCcBccRow" align="baseline">
+            <label id="collapsed1LtoCcBccLabel" class="headerName" 
+                   value="&toField2.label;" control="collapsed1LtoCcBccBox"/>
+             <mail-multi-emailHeaderField id="collapsed1LtoCcBccBox" flex="1"/>
+          </row>
+        </grid>
+-->
+        <hbox id="collapsed1LdateOutBox" align="start" pack="end" flex="0">
+          <row id="collapsed1LdateRow">
+            <label id="collapsed1LdateBox" class="dateLabel" flex="1"/>
+          </row>
+        </hbox>        
+        <header-view-button-box id="collapsed1LButtonBox" flex="0" align="start" hidden="true"/>
+      </hbox>
+      <hbox id="collapsed1LHeaderViewSecondLine" align="top" flex="1" collapsed="true">
+      </hbox>
+    </vbox>
+
+    <vbox id="collapsed2LHeadersBox" flex="1" collapsed="true">
+      <hbox id="collapsed2LHeaderViewFirstLine" flex="0">
+        <hbox id="collapsed2LfromOutBox" align="start" flex="0">
+          <grid flex="1">
+            <columns>
+              <column flex="0"/>
+            </columns>
+            <rows>
+              <row id="collapsed2LfromRow">
+                <mail-multi-emailHeaderField id="collapsed2LfromBox" flex="0"/>
+              </row>
+            </rows>
+          </grid>
+        </hbox>
+        <grid id="collapsed2LtoCcBccOutBox" flex="1">
+          <columns>
+            <column flex="0"/>
+            <column flex="1"/>
+          </columns>
+          <rows>
+            <row id="collapsed2LtoCcBccRow" align="baseline">
+              <label id="collapsed2LtoCcBccLabel" class="headerName" 
+                     value="&toField2.label;" control="collapsed2LtoCcBccBox"/>
+              <mail-multi-emailHeaderField id="collapsed2LtoCcBccBox" flex="1"/>
+            </row>
+          </rows>
+        </grid>
+        <header-view-button-box id="collapsed2LButtonBox" flex="0" align="start"/>
+      </hbox>
+      <hbox id="collapsed2LHeaderViewSecondLine" align="top" flex="1">
+        <hbox id="collapsed2LsubjectOutBox" align="top" flex="99">
+          <row id="collapsed2LsubjectRow" flex="99">
+            <mail-headerfield id="collapsed2LsubjectBox" flex="99"/>
+          </row>
+        </hbox>
+        <hbox id="collapsed2LdateOutBox" align="top" pack="end" flex="0">
+          <row id="collapsed2LdateRow" align="top" pack="end">
+            <label id="collapsed2LdateBox" class="dateLabel" flex="1"/>
+          </row>
+        </hbox>
+      </hbox>
+    </vbox>
+
+  </vbox>
+
+  </deck>
 
 </overlay>
+
+<!-- 
+-->
\ No newline at end of file
diff --git a/install.rdf b/install.rdf
index 35650a2..6efa6e2 100644
--- a/install.rdf
+++ b/install.rdf
@@ -6,20 +6,25 @@
 
 	<RDF:Description about="urn:mozilla:install-manifest">
 		<em:name>CompactHeader</em:name>
-		<em:version>0.3.4</em:version>
-		<em:description>Add ability to reduce header size to one line.</em:description>
+		<em:version>1.2.5</em:version>
+		<em:description>Add ability to reduce header size to one or two lines. Linkify subjects in RSS feeds.</em:description>
 		<em:creator>Joachim Herb</em:creator>
 		<em:contributor>Zamula</em:contributor>
+		<em:contributor>Alex Dedul (original author of RSS Linkify Subject)</em:contributor>
+    <em:contributor>Marco (Help for Mac OS X theme)</em:contributor>
     <em:optionsURL>chrome://CompactHeader/content/preferences.xul</em:optionsURL>
 		<em:homepageURL>http://compactheader.mozdev.org/</em:homepageURL>
+		<em:updateURL>http://compactheader.mozdev.org/update.rdf</em:updateURL>
+    <em:updateKey>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+O1ZsY+7zY6A2GUdEx+6yoWhlfMz7qtDWDLEzMDCZ046vWauIwTGsIT4/48InmKSjF8q529U8FHamJI03FQuuE94KdLkQCJfGTUOwf/U1pKcHpF/WweGmRj7SrOt/exNCdUj7EaJ/vICy4TaUZ42Oul2CwP00x4BixiNs+26UbwIDAQAB</em:updateKey>
 		<em:id>{58D4392A-842E-11DE-B51A-C7B855D89593}</em:id>
 		<em:type>2</em:type>
+  	<em:iconURL>chrome://CompactHeader/skin/cohe-icon.png</em:iconURL>
 		<em:targetApplication>
 			<RDF:Description>
 				<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
-				<em:minVersion>3.0b3</em:minVersion>
-				<em:maxVersion>3.1a1pre</em:maxVersion>
+				<em:minVersion>3.1</em:minVersion>
+				<em:maxVersion>5.0b2pre</em:maxVersion>
 			</RDF:Description>
 		</em:targetApplication>
 	</RDF:Description>
-</RDF>
\ No newline at end of file
+</RDF>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/compactheader.git



More information about the Pkg-mozext-commits mailing list