diff options
author | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-10-27 00:48:33 +0200 |
---|---|---|
committer | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-10-27 00:48:33 +0200 |
commit | 9e8067ca4bb9e0d21a397f681fce376e9b28ef92 (patch) | |
tree | 1fa4f58ac0a732fa46d4991644b9ed8d66349ef2 | |
parent | f2a3931c5f955bc2b26d3a6ee6e3fb55f6a27ee4 (diff) | |
download | bugzilla-9e8067ca4bb9e0d21a397f681fce376e9b28ef92.tar.gz bugzilla-9e8067ca4bb9e0d21a397f681fce376e9b28ef92.tar.xz |
Bug 551468: Stop word-wrapping comments on the server
r=glob, a=mkanat
-rw-r--r-- | Bugzilla/Constants.pm | 2 | ||||
-rw-r--r-- | js/comments.js | 48 | ||||
-rw-r--r-- | skins/standard/IE-fixes.css | 2 | ||||
-rw-r--r-- | skins/standard/attachment.css | 3 | ||||
-rw-r--r-- | skins/standard/global.css | 5 | ||||
-rw-r--r-- | template/en/default/attachment/midair.html.tmpl | 2 | ||||
-rw-r--r-- | template/en/default/bug/comments.html.tmpl | 2 | ||||
-rw-r--r-- | template/en/default/bug/edit.html.tmpl | 12 | ||||
-rw-r--r-- | template/en/default/bug/field.html.tmpl | 3 | ||||
-rw-r--r-- | template/en/default/bug/process/midair.html.tmpl | 2 | ||||
-rw-r--r-- | template/en/default/global/header.html.tmpl | 4 | ||||
-rw-r--r-- | template/en/default/pages/linked.html.tmpl | 4 |
12 files changed, 62 insertions, 27 deletions
diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm index 9ce2c9f94..f4ed56608 100644 --- a/Bugzilla/Constants.pm +++ b/Bugzilla/Constants.pm @@ -295,7 +295,7 @@ use constant LIST_OF_BUGS => 1; # How many of the user's most recent searches to save. use constant SAVE_NUM_SEARCHES => 10; -# The column length for displayed (and wrapped) bug comments. +# The column width for comment textareas and comments in bugmails. use constant COMMENT_COLS => 80; # Used in _check_comment(). Gives the max length allowed for a comment. use constant MAX_COMMENT_LENGTH => 65535; diff --git a/js/comments.js b/js/comments.js index 2f1a14406..d9c0f5033 100644 --- a/js/comments.js +++ b/js/comments.js @@ -18,6 +18,7 @@ * Contributor(s): Frédéric Buclin <LpSolit@gmail.com> * Max Kanat-Alexander <mkanat@bugzilla.org> * Edmund Wong <ewong@pw-wspx.org> + * Anthony Pipkin <a.pipkin@yahoo.com> */ function updateCommentPrivacy(checkbox, id) { @@ -76,6 +77,53 @@ function expand_comment(link, comment) { YAHOO.util.Dom.removeClass(comment, 'collapsed'); } +function wrapReplyText(text) { + // This is -3 to account for "\n> " + var maxCol = BUGZILLA.constant.COMMENT_COLS - 3; + var text_lines = text.split("\n"); + var wrapped_lines = new Array(); + + for (var i = 0; i < text_lines.length; i++) { + var paragraph = text_lines[i]; + // Don't wrap already-quoted text. + if (paragraph.indexOf('>') == 0) { + wrapped_lines.push('> ' + paragraph); + continue; + } + + var replace_lines = new Array(); + while (paragraph.length > maxCol) { + var testLine = paragraph.substring(0, maxCol); + var pos = testLine.search(/\s\S*$/); + + if (pos < 1) { + // Try to find some ASCII punctuation that's reasonable + // to break on. + var punct = '\\-\\./,!;:'; + var punctRe = new RegExp('[' + punct + '][^' + punct + ']+$'); + pos = testLine.search(punctRe) + 1; + // Try to find some CJK Punctuation that's reasonable + // to break on. + if (pos == 0) + pos = testLine.search(/[\u3000\u3001\u3002\u303E\u303F]/) + 1; + // If we can't find any break point, we simply break long + // words. This makes long, punctuation-less CJK text wrap, + // even if it wraps incorrectly. + if (pos == 0) pos = maxCol; + } + + var wrapped_line = paragraph.substring(0, pos); + replace_lines.push(wrapped_line); + paragraph = paragraph.substring(pos); + // Strip whitespace from the start of the line + paragraph = paragraph.replace(/^\s+/, ''); + } + replace_lines.push(paragraph); + wrapped_lines.push("> " + replace_lines.join("\n> ")); + } + return wrapped_lines.join("\n"); +} + /* This way, we are sure that browsers which do not support JS * won't display this link */ diff --git a/skins/standard/IE-fixes.css b/skins/standard/IE-fixes.css index fc2225398..9a7856aba 100644 --- a/skins/standard/IE-fixes.css +++ b/skins/standard/IE-fixes.css @@ -13,7 +13,7 @@ * Contributor(s): Marc Schumann <wurblzap@gmail.com> */ -.bz_comment_text, .uneditable_textarea { +.bz_comment_text, .uneditable_textarea, tbody.file pre { white-space: pre; word-wrap: break-word; } diff --git a/skins/standard/attachment.css b/skins/standard/attachment.css index c05cfe2da..b42b2224c 100644 --- a/skins/standard/attachment.css +++ b/skins/standard/attachment.css @@ -73,9 +73,6 @@ table.file_table { tbody.file pre { display: inline; - white-space: pre-wrap; /* CSS 3 & CSS 2.1 */ - white-space: -moz-pre-wrap; /* Gecko < 1.9.1 */ - white-space: -o-pre-wrap; /* Opera 7 */ font-size: 0.9em; } diff --git a/skins/standard/global.css b/skins/standard/global.css index db874de29..0deb4b94a 100644 --- a/skins/standard/global.css +++ b/skins/standard/global.css @@ -293,9 +293,8 @@ div#docslinks { margin-bottom: 2em; } -/* The rules for these classes make international text wrap correctly, - even for languages like Japanese that have no spaces. */ -.bz_comment_text, .uneditable_textarea { +/* tbody.file pre is for the Diff view of attachments. */ +.bz_comment_text, .uneditable_textarea, tbody.file pre { font-family: monospace; /* Note that these must all be on separate lines or they stop working in Konqueror. */ diff --git a/template/en/default/attachment/midair.html.tmpl b/template/en/default/attachment/midair.html.tmpl index f0883b55b..f7f40fdcb 100644 --- a/template/en/default/attachment/midair.html.tmpl +++ b/template/en/default/attachment/midair.html.tmpl @@ -51,7 +51,7 @@ <p> Your comment was:<br> <blockquote><pre class="bz_comment_text"> - [% cgi.param("comment") FILTER wrap_comment FILTER html %] + [% cgi.param("comment") FILTER html %] </pre></blockquote> </p> [% END %] diff --git a/template/en/default/bug/comments.html.tmpl b/template/en/default/bug/comments.html.tmpl index 580ba6b5e..208ea092a 100644 --- a/template/en/default/bug/comments.html.tmpl +++ b/template/en/default/bug/comments.html.tmpl @@ -102,7 +102,7 @@ [% BLOCK a_comment %] [% RETURN IF comment.is_private AND ! user.is_insider %] - [% comment_text = comment.body_full({ wrap => 1 }) %] + [% comment_text = comment.body_full %] [% RETURN IF comment_text == '' AND (comment.work_time - 0) != 0 AND !user.is_timetracker %] <div id="c[% count %]" class="bz_comment[% " bz_private" IF comment.is_private %] diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl index 9c951fb2e..2a9a0776e 100644 --- a/template/en/default/bug/edit.html.tmpl +++ b/template/en/default/bug/edit.html.tmpl @@ -52,17 +52,7 @@ /* pre id="comment_name_N" */ var text_elem = document.getElementById('comment_text_'+id); var text = getText(text_elem); - - /* make sure we split on all newlines -- IE or Moz use \r and \n - * respectively. - */ - text = text.split(/\r|\n/); - - for (var i=0; i < text.length; i++) { - replytext += "> " + text[i] + "\n"; - } - - replytext = prefix + replytext + "\n"; + replytext = prefix + wrapReplyText(text); [% ELSIF user.settings.quote_replies.value == 'simple_reply' %] replytext = prefix; [% END %] diff --git a/template/en/default/bug/field.html.tmpl b/template/en/default/bug/field.html.tmpl index 4065b3af0..1eb4574bf 100644 --- a/template/en/default/bug/field.html.tmpl +++ b/template/en/default/bug/field.html.tmpl @@ -206,8 +206,7 @@ </script> [% END %] [% ELSIF field.type == constants.FIELD_TYPE_TEXTAREA %] - <div class="uneditable_textarea">[% value FILTER wrap_comment(60) - FILTER html %]</div> + <div class="uneditable_textarea">[% value FILTER html %]</div> [% ELSIF field.type == constants.FIELD_TYPE_BUG_ID %] [% IF value %] [% value FILTER bug_link(value, use_alias => 1) FILTER none %] diff --git a/template/en/default/bug/process/midair.html.tmpl b/template/en/default/bug/process/midair.html.tmpl index 8a49f7cdc..157cb44b4 100644 --- a/template/en/default/bug/process/midair.html.tmpl +++ b/template/en/default/bug/process/midair.html.tmpl @@ -67,7 +67,7 @@ <p> Your comment was:<br> <blockquote><pre class="bz_comment_text"> - [% cgi.param("comment") FILTER wrap_comment FILTER html %] + [% cgi.param("comment") FILTER html %] </pre></blockquote> </p> [% END %] diff --git a/template/en/default/global/header.html.tmpl b/template/en/default/global/header.html.tmpl index aa6604d2c..e5e5a08fb 100644 --- a/template/en/default/global/header.html.tmpl +++ b/template/en/default/global/header.html.tmpl @@ -189,7 +189,9 @@ cookiepath: '[% Param('cookiepath') FILTER js %]', maxusermatches: [% Param('maxusermatches') FILTER js %] }, - + constant: { + COMMENT_COLS: [% constants.COMMENT_COLS FILTER js %] + }, string: { [%# Please keep these in alphabetical order. %] diff --git a/template/en/default/pages/linked.html.tmpl b/template/en/default/pages/linked.html.tmpl index 52b1735f6..b5d850627 100644 --- a/template/en/default/pages/linked.html.tmpl +++ b/template/en/default/pages/linked.html.tmpl @@ -31,7 +31,7 @@ <p> <pre class="bz_comment_text"> -[%- cgi.param("text") FILTER wrap_comment FILTER quoteUrls FILTER html -%] +[%- cgi.param("text") FILTER quoteUrls FILTER html -%] </pre> </p> @@ -46,7 +46,7 @@ <p> <pre class="bz_comment_text"> -[%- cgi.param("text") FILTER wrap_comment FILTER quoteUrls -%] +[%- cgi.param("text") FILTER quoteUrls -%] </pre> </p> |