diff --git a/composer/base/content/composer/commands.js b/composer/base/content/composer/commands.js
index 1b1cd8881317..c9254f169b43 100644
--- a/composer/base/content/composer/commands.js
+++ b/composer/base/content/composer/commands.js
@@ -111,9 +111,15 @@ var ComposerCommands = {
case "cmd_bold":
case "cmd_italic":
case "cmd_underline":
+ case "cmd_strong":
+ case "cmd_em":
this.pokeStyleUI(command, params.getBooleanValue("state_all"));
break;
+ case "cmd_paragraphState":
+ this.pokeMultiStateUI(command, params);
+ break;
+
default: dump("no update for command: " +command+"\n");
}
}
@@ -149,6 +155,29 @@ var ComposerCommands = {
return null;
},
+ pokeMultiStateUI: function pokeMultiStateUI(uiID, cmdParams)
+ {
+ try
+ {
+ var commandNode = document.getElementById(uiID);
+ if (!commandNode)
+ return;
+
+ var isMixed = cmdParams.getBooleanValue("state_mixed");
+ var desiredAttrib;
+ if (isMixed)
+ desiredAttrib = "mixed";
+ else
+ desiredAttrib = cmdParams.getCStringValue("state_attribute");
+
+ var uiState = commandNode.getAttribute("state");
+ if (desiredAttrib != uiState)
+ {
+ commandNode.setAttribute("state", desiredAttrib);
+ }
+ } catch(e) {}
+ },
+
doStyleUICommand: function doStyleUICommand(cmdStr)
{
try
@@ -158,6 +187,25 @@ var ComposerCommands = {
} catch(e) {}
},
+ doStatefulCommand: function doStatefulCommand(commandID, newState)
+ {
+ var commandNode = document.getElementById(commandID);
+ if (commandNode)
+ commandNode.setAttribute("state", newState);
+
+ try
+ {
+ var cmdParams = this.newCommandParams();
+ if (!cmdParams) return;
+
+ cmdParams.setCStringValue("state_attribute", newState);
+ this.goDoCommandParams(commandID, cmdParams);
+
+ this.pokeMultiStateUI(commandID, cmdParams);
+
+ } catch(e) { dump("error thrown in doStatefulCommand: "+e+"\n"); }
+ },
+
goDoCommandParams: function goDoCommandParams(command, params)
{
try
@@ -196,6 +244,7 @@ var ComposerCommands = {
commandTable.registerCommand("cmd_open", cmdOpen);
commandTable.registerCommand("cmd_fullScreen", cmdFullScreen);
commandTable.registerCommand("cmd_new", cmdNew);
+ commandTable.registerCommand("cmd_renderedHTMLEnabler", cmdDummyHTML);
},
setupFormatCommands: function setupFormatCommands()
diff --git a/composer/base/content/composer/composer.js b/composer/base/content/composer/composer.js
index 1ce07243d03c..7885fe33b3be 100644
--- a/composer/base/content/composer/composer.js
+++ b/composer/base/content/composer/composer.js
@@ -130,13 +130,13 @@ function OpenExtensionsManager()
function StopLoadingPage()
{
- document.getElementById("tabeditor").stopWebNavigation();
+ gDialog.tabeditor.stopWebNavigation();
}
//--------------------------------------------------------------------
function onButtonUpdate(button, commmandID)
{
- var commandNode = document.getElementById(commmandID);
+ var commandNode = gDialog[commmandID];
var state = commandNode.getAttribute("state");
button.checked = state == "true";
}
@@ -168,3 +168,37 @@ function UpdateWindowTitle()
2);
} catch (e) { dump(e); }
}
+
+function onParagraphFormatChange(paraMenuList, commandID)
+{
+ if (!paraMenuList)
+ return;
+
+ var commandNode = gDialog[commandID];
+ var state = commandNode.getAttribute("state");
+
+ // force match with "normal"
+ if (state == "body")
+ state = "";
+
+ if (state == "mixed")
+ {
+ //Selection is the "mixed" ( > 1 style) state
+ paraMenuList.selectedItem = null;
+ paraMenuList.setAttribute("label",GetString('Mixed'));
+ }
+ else
+ {
+ var menuPopup = gDialog.ParagraphPopup;
+ var menuItems = menuPopup.childNodes;
+ for (var i=0; i < menuItems.length; i++)
+ {
+ var menuItem = menuItems.item(i);
+ if ("value" in menuItem && menuItem.value == state)
+ {
+ paraMenuList.selectedItem = menuItem;
+ break;
+ }
+ }
+ }
+}
diff --git a/composer/base/content/composer/composer.xul b/composer/base/content/composer/composer.xul
index 7865e070ba20..730597e381fe 100644
--- a/composer/base/content/composer/composer.xul
+++ b/composer/base/content/composer/composer.xul
@@ -83,7 +83,7 @@
mode="full"
context="format-toolbar-context-menu"
customizable="true"
- defaultset="spacer,boldButton,italicButton,underlineButton"/>
+ defaultset="spacer,ParagraphSelectBox,emButton,strongButton,underlineButton"/>
diff --git a/composer/base/content/composer/formatbarpalette.inc b/composer/base/content/composer/formatbarpalette.inc
index 96288968e21f..ef640be7dede 100644
--- a/composer/base/content/composer/formatbarpalette.inc
+++ b/composer/base/content/composer/formatbarpalette.inc
@@ -1,18 +1,51 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/composer/base/content/composer/sets.inc b/composer/base/content/composer/sets.inc
index a664baee53df..64b72dd4f543 100644
--- a/composer/base/content/composer/sets.inc
+++ b/composer/base/content/composer/sets.inc
@@ -14,7 +14,7 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/composer/base/skin/classic/composer/formatToolbar.css b/composer/base/skin/classic/composer/formatToolbar.css
index e04f2c7791bc..a18978d30482 100644
--- a/composer/base/skin/classic/composer/formatToolbar.css
+++ b/composer/base/skin/classic/composer/formatToolbar.css
@@ -35,53 +35,96 @@
*
* ***** END LICENSE BLOCK ***** */
-#boldButton {
- list-style-image: url("chrome://composer/skin/icons/btn2.png");
+#FormatToolbox .toolbarbutton-text {
+ display: none;
+}
+
+#CustomizeToolbarWindow toolbarbutton,
+#CustomizeToolbarWindow toolbarpalette {
+ -moz-box-orient: vertical;
+}
+
+#boldButton, #italicButton, #underlineButton,
+#strongButton, #emButton {
+ list-style-image: url("chrome://composer/skin/icons/btn3.png");
+}
+
+#emButton {
+ -moz-image-region: rect(0px 16px 16px 0);
+}
+#emButton:hover {
+ -moz-image-region: rect(0px 32px 16px 16px);
+}
+#emButton:hover:active {
+ -moz-image-region: rect(0px 48px 16px 32px);
+}
+#emButton[checked="true"] {
+ -moz-image-region: rect(0px 16px 16px 0);
+}
+#emButton[disabled="true"] {
+ -moz-image-region: rect(0px 64px 16px 48px);
+}
+
+#strongButton {
-moz-image-region: rect(16px 16px 32px 0);
}
-#boldButton:hover {
+#strongButton:hover {
-moz-image-region: rect(16px 32px 32px 16px);
}
-#boldButton:hover:active {
+#strongButton:hover:active {
-moz-image-region: rect(16px 48px 32px 32px);
}
-#boldButton[checked="true"] {
+#strongButton[checked="true"] {
-moz-image-region: rect(16px 16px 32px 0);
}
-#boldButton[disabled="true"] {
+#strongButton[disabled="true"] {
-moz-image-region: rect(16px 64px 32px 48px);
}
-#italicButton {
- list-style-image: url("chrome://composer/skin/icons/btn2.png");
- -moz-image-region: rect(98px 16px 114px 0);
+#boldButton{
+ -moz-image-region: rect(32px 16px 48px 0);
}
-#italicButton:hover {
- -moz-image-region: rect(98px 32px 114px 16px);
+#boldButton:hover {
+ -moz-image-region: rect(32px 32px 48px 16px);
}
-#italicButton:hover:active {
- -moz-image-region: rect(98px 48px 114px 32px);
+#boldButton:hover:active {
+ -moz-image-region: rect(32px 48px 48px 32px);
}
-#italicButton[checked="true"] {
- -moz-image-region: rect(98px 16px 114px 0);
+#boldButton[checked="true"] {
+ -moz-image-region: rect(32px 16px 48px 0);
}
-#italicButton[disabled="true"] {
- -moz-image-region: rect(98px 64px 114px 48px);
+#boldButton[disabled="true"] {
+ -moz-image-region: rect(32px 64px 48px 48px);
}
-#underlineButton {
- list-style-image: url("chrome://composer/skin/icons/btn2.png");
- -moz-image-region: rect(114px 16px 130px 0);
+#italicButton{
+ -moz-image-region: rect(48px 16px 64px 0);
+}
+#italicButton:hover {
+ -moz-image-region: rect(48px 32px 64px 16px);
+}
+#italicButton:hover:active {
+ -moz-image-region: rect(48px 48px 64px 32px);
+}
+#italicButton[checked="true"] {
+ -moz-image-region: rect(48px 16px 64px 0);
+}
+#italicButton[disabled="true"] {
+ -moz-image-region: rect(48px 64px 64px 48px);
+}
+
+#underlineButton{
+ -moz-image-region: rect(64px 16px 80px 0);
}
#underlineButton:hover {
- -moz-image-region: rect(114px 32px 130px 16px);
+ -moz-image-region: rect(64px 32px 80px 16px);
}
#underlineButton:hover:active {
- -moz-image-region: rect(114px 48px 130px 32px);
+ -moz-image-region: rect(64px 48px 80px 32px);
}
#underlineButton[checked="true"] {
- -moz-image-region: rect(114px 16px 130px 0);
+ -moz-image-region: rect(64px 16px 80px 0);
}
#underlineButton[disabled="true"] {
- -moz-image-region: rect(114px 64px 130px 48px);
-}
\ No newline at end of file
+ -moz-image-region: rect(64px 64px 80px 48px);
+}
diff --git a/composer/base/skin/classic/composer/icons/btn2.png b/composer/base/skin/classic/composer/icons/btn2.png
deleted file mode 100644
index 13b90aa194b2..000000000000
Binary files a/composer/base/skin/classic/composer/icons/btn2.png and /dev/null differ
diff --git a/composer/base/skin/classic/composer/icons/btn3.png b/composer/base/skin/classic/composer/icons/btn3.png
new file mode 100644
index 000000000000..4d62bc04e95e
Binary files /dev/null and b/composer/base/skin/classic/composer/icons/btn3.png differ