diff --git a/mozilla/extensions/irc/xul/content/commands.js b/mozilla/extensions/irc/xul/content/commands.js index 3f6a822ba67..7440d2902db 100644 --- a/mozilla/extensions/irc/xul/content/commands.js +++ b/mozilla/extensions/irc/xul/content/commands.js @@ -95,6 +95,7 @@ function initCommands() ["help", cmdHelp, CMD_CONSOLE], ["hide-view", cmdHideView, CMD_CONSOLE], ["ignore", cmdIgnore, CMD_NEED_NET | CMD_CONSOLE], + ["input-text-direction", cmdInputTextDirection, 0], ["invite", cmdInvite, CMD_NEED_SRV | CMD_CONSOLE], ["join", cmdJoin, CMD_NEED_SRV | CMD_CONSOLE], ["join-charset", cmdJoin, CMD_NEED_SRV | CMD_CONSOLE], @@ -136,6 +137,7 @@ function initCommands() ["sync-timestamps", cmdSync, 0], ["sync-windows", cmdSync, 0], ["testdisplay", cmdTestDisplay, CMD_CONSOLE], + ["text-direction", cmdTextDirection, 0], ["timestamps", cmdTimestamps, CMD_CONSOLE], ["timestamp-format", cmdTimestampFormat, CMD_CONSOLE], ["toggle-ui", cmdToggleUI, CMD_CONSOLE], @@ -186,8 +188,14 @@ function initCommands() ["userlist", "toggle-ui userlist", CMD_CONSOLE], ["tabstrip", "toggle-ui tabstrip", CMD_CONSOLE], ["statusbar", "toggle-ui status", CMD_CONSOLE], - ["header", "toggle-ui header", CMD_CONSOLE] - + ["header", "toggle-ui header", CMD_CONSOLE], + + // text-direction aliases + ["rtl", "text-direction rtl", CMD_CONSOLE], + ["ltr", "text-direction ltr", CMD_CONSOLE], + ["toggle-text-dir", "text-direction toggle", 0], + ["irtl", "input-text-direction rtl", CMD_CONSOLE], + ["iltr", "input-text-direction ltr", CMD_CONSOLE] ]; // set the stringbundle associated with these commands. @@ -2700,3 +2708,47 @@ function cmdDCCDecline(e) display(MSG_DCC_MATCHES_HELP); return true; } + +function cmdTextDirection(e) +{ + var direction; + + switch (e.dir) + { + case "toggle": + sourceObject = e.sourceObject.frame.contentDocument.body; + if (window.getComputedStyle(sourceObject, null).direction == "ltr") + direction = 'rtl'; + else + direction = 'ltr'; + break; + case "rtl": + direction = 'rtl'; + break; + default: + // that is "case "ltr":", + // but even if !e.dir OR e.dir is an invalid value -> set to default direction + direction = 'ltr'; + } + client.input.style.direction = direction; + e.sourceObject.frame.contentDocument.body.style.direction = direction; + + return true; +} + +function cmdInputTextDirection(e) +{ + var direction; + + switch (e.dir) + { + case "rtl": + client.input.style.direction = 'rtl'; + break + default: + // that is "case "ltr":", but even if !e.dir OR e.dir is an invalid value -> set to default direction + client.input.style.direction = 'ltr'; + } + + return true; +} diff --git a/mozilla/extensions/irc/xul/content/menus.js b/mozilla/extensions/irc/xul/content/menus.js index d6960b42a72..63ba888cf3b 100644 --- a/mozilla/extensions/irc/xul/content/menus.js +++ b/mozilla/extensions/irc/xul/content/menus.js @@ -296,7 +296,9 @@ function initMenus() ["-"], ["leave", {visibleif: "cx.TYPE == 'IRCChannel'"}], ["delete-view", {visibleif: "cx.TYPE != 'IRCChannel'"}], - ["disconnect"] + ["disconnect"], + ["-"], + ["toggle-text-dir"] ] }; @@ -312,7 +314,9 @@ function initMenus() ["-"], ["leave", {visibleif: "cx.TYPE == 'IRCChannel'"}], ["delete-view", {visibleif: "cx.TYPE != 'IRCChannel'"}], - ["disconnect"] + ["disconnect"], + ["-"], + ["toggle-text-dir"] ] }; diff --git a/mozilla/extensions/irc/xul/content/static.js b/mozilla/extensions/irc/xul/content/static.js index d869a946c82..e65b0a9c1ce 100644 --- a/mozilla/extensions/irc/xul/content/static.js +++ b/mozilla/extensions/irc/xul/content/static.js @@ -1865,6 +1865,9 @@ function multilineInputMode (state) singleInputBox.setAttribute ("collapsed", "true"); splitter.setAttribute ("collapsed", "false"); multiInputBox.setAttribute ("collapsed", "false"); + // muliInput should have the same direction as singleInput + var direction = window.getComputedStyle(singleInput, null).direction; + multiInput.style.direction = direction; client.input = multiInput; } else /* turn off multiline input mode */ @@ -1876,6 +1879,9 @@ function multilineInputMode (state) splitter.setAttribute ("collapsed", "true"); multiInputBox.setAttribute ("collapsed", "true"); singleInputBox.setAttribute ("collapsed", "false"); + // singleInput should have the same direction as multiInput + var direction = window.getComputedStyle(multiInput,'').direction; + singleInput.style.direction = direction; client.input = singleInput; } @@ -2024,6 +2030,10 @@ function setCurrentObject (obj) if (client.PRINT_DIRECTION == 1) scrollDown(obj.frame, false); + // Input area should have the same direction as the output area + var contentArea = client.currentObject.frame.contentDocument.body; + var direction = window.getComputedStyle(contentArea, null).direction; + client.input.style.direction = direction; client.input.focus(); } diff --git a/mozilla/extensions/irc/xul/locale/en-US/chatzilla.properties b/mozilla/extensions/irc/xul/locale/en-US/chatzilla.properties index 3812427a4ec..b1aa39713b5 100644 --- a/mozilla/extensions/irc/xul/locale/en-US/chatzilla.properties +++ b/mozilla/extensions/irc/xul/locale/en-US/chatzilla.properties @@ -237,6 +237,18 @@ cmd.statusbar.key = accel shift S cmd.header.label = Header cmd.header.key = accel shift H +cmd.input-text-direction.params =