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 @@ - @@ -28,6 +28,10 @@ + + + + + + + + + + + + + + + + + + + + + + + + + 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