Bug 1059684: markdown text should not be rendered within a <pre> tag

r=glob,a=glob


git-svn-id: svn://10.0.0.236/trunk@265644 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
bzrmirror%bugzilla.org 2014-10-28 03:15:50 +00:00
parent 77ad1b019e
commit 00fc957fe6
9 changed files with 55 additions and 23 deletions

View File

@ -1 +1 @@
9189 9190

View File

@ -1 +1 @@
2fbc1045f5b8e82d9a68328c35ba07d70d9d1877 1f5404213d4b93ef573e99112536ed5af6643770

View File

@ -99,7 +99,7 @@ sub _RunSpanGamut {
$text = $self->_EncodeAmpsAndAngles($text); $text = $self->_EncodeAmpsAndAngles($text);
$text = $self->_DoItalicsAndBold($text); $text = $self->_DoItalicsAndBold($text);
$text =~ s/ {2,}\n/ <br$self->{empty_element_suffix}\n/g; $text =~ s/\n/<br$self->{empty_element_suffix}\n/g;
return $text; return $text;
} }
@ -323,13 +323,6 @@ sub _DoItalicsAndBold {
return $text; return $text;
} }
# Override this function to ignore 'wrap_in_p_tags' from
# the caller and to not generate <p> tags around the output.
sub _FormParagraphs {
my ($self, $text) = @_;
return $self->SUPER::_FormParagraphs($text, { wrap_in_p_tags => 0 });
}
sub _DoStrikethroughs { sub _DoStrikethroughs {
my ($self, $text) = @_; my ($self, $text) = @_;

View File

@ -632,6 +632,14 @@ sub is_bug_ignored {
return (grep {$_->{'id'} == $bug_id} @{$self->bugs_ignored}) ? 1 : 0; return (grep {$_->{'id'} == $bug_id} @{$self->bugs_ignored}) ? 1 : 0;
} }
sub use_markdown {
my ($self, $comment) = @_;
return Bugzilla->feature('markdown')
&& $self->settings->{use_markdown}->{is_enabled}
&& $self->settings->{use_markdown}->{value} eq 'on'
&& (!defined $comment || $comment->is_markdown);
}
########################## ##########################
# Saved Recent Bug Lists # # Saved Recent Bug Lists #
########################## ##########################
@ -2623,6 +2631,12 @@ C<string> The current summary of the bug.
Returns true if the user does not want email notifications for the Returns true if the user does not want email notifications for the
specified bug ID, else returns false. specified bug ID, else returns false.
=item C<use_markdown>
Returns true if the user has set their preferences to use Markdown
for rendering comments. If an optional C<comment> object is passed
then it returns true if the comment has markdown enabled.
=back =back
=head2 Saved Recent Bug Lists =head2 Saved Recent Bug Lists

View File

@ -984,18 +984,32 @@ function initDirtyFieldTracking() {
var last_comment_text = ''; var last_comment_text = '';
var last_markdown_cb_value = null; var last_markdown_cb_value = null;
var comment_textarea_width = null;
var comment_textarea_height = null;
function show_comment_preview(bug_id) { function refresh_markdown_preview (bug_id) {
if (!YAHOO.util.Dom.hasClass('comment_preview_tab', 'active_comment_tab'))
return;
show_comment_preview(bug_id, 1);
}
function show_comment_preview(bug_id, refresh) {
var Dom = YAHOO.util.Dom; var Dom = YAHOO.util.Dom;
var comment = document.getElementById('comment'); var comment = document.getElementById('comment');
var preview = document.getElementById('comment_preview'); var preview = document.getElementById('comment_preview');
var markdown_cb = document.getElementById('use_markdown'); var markdown_cb = document.getElementById('use_markdown');
if (!comment || !preview) return; if (!comment || !preview) return;
if (Dom.hasClass('comment_preview_tab', 'active_comment_tab')) return; if (Dom.hasClass('comment_preview_tab', 'active_comment_tab') && !refresh)
return;
preview.style.width = (comment.clientWidth - 4) + 'px'; if (!comment_textarea_width) {
preview.style.height = comment.offsetHeight + 'px'; comment_textarea_width = (comment.clientWidth - 4) + 'px';
comment_textarea_height = comment.offsetHeight + 'px';
}
preview.style.width = comment_textarea_width;
preview.style.height = comment_textarea_height;
var comment_tab = document.getElementById('comment_tab'); var comment_tab = document.getElementById('comment_tab');
Dom.addClass(comment, 'bz_default_hidden'); Dom.addClass(comment, 'bz_default_hidden');
@ -1029,6 +1043,12 @@ function show_comment_preview(bug_id) {
document.getElementById('comment_preview_text').innerHTML = data.result.html; document.getElementById('comment_preview_text').innerHTML = data.result.html;
Dom.addClass('comment_preview_loading', 'bz_default_hidden'); Dom.addClass('comment_preview_loading', 'bz_default_hidden');
Dom.removeClass('comment_preview_text', 'bz_default_hidden'); Dom.removeClass('comment_preview_text', 'bz_default_hidden');
if (markdown_cb.checked) {
Dom.removeClass('comment_preview_text', 'comment_preview_pre');
}
else {
Dom.addClass('comment_preview_text', 'comment_preview_pre');
}
last_comment_text = comment.value; last_comment_text = comment.value;
last_markdown_cb_value = markdown_cb.checked; last_markdown_cb_value = markdown_cb.checked;
} }

View File

@ -233,8 +233,8 @@ if (should_set('keywords')) {
$set_all_fields{keywords}->{$action} = $cgi->param('keywords'); $set_all_fields{keywords}->{$action} = $cgi->param('keywords');
} }
if (should_set('comment')) { if (should_set('comment')) {
my $is_markdown = ($user->settings->{use_markdown}->{is_enabled} && my $is_markdown = ($user->use_markdown
$cgi->param('use_markdown')) ? 1 : 0; && $cgi->param('use_markdown') eq '1') ? 1 : 0;
$set_all_fields{comment} = { $set_all_fields{comment} = {
body => scalar $cgi->param('comment'), body => scalar $cgi->param('comment'),

View File

@ -319,7 +319,7 @@ div#docslinks {
} }
/* tbody.file pre is for the Diff view of attachments. */ /* tbody.file pre is for the Diff view of attachments. */
.bz_comment_text, .uneditable_textarea, tbody.file pre { pre.bz_comment_text, .uneditable_textarea, tbody.file pre {
font-family: monospace; font-family: monospace;
white-space: pre-wrap; white-space: pre-wrap;
} }
@ -732,6 +732,10 @@ input.required, select.required, span.required_explanation {
width: auto; width: auto;
} }
.comment_preview_pre {
white-space: pre;
}
#comment_preview_loading { #comment_preview_loading {
font-style: italic; font-style: italic;
} }

View File

@ -32,14 +32,15 @@
<div id="comment_preview" class="bz_default_hidden bz_comment"> <div id="comment_preview" class="bz_default_hidden bz_comment">
<div id="comment_preview_loading" class="bz_default_hidden">Generating Preview...</div> <div id="comment_preview_loading" class="bz_default_hidden">Generating Preview...</div>
<div id="comment_preview_error" class="bz_default_hidden"></div> <div id="comment_preview_error" class="bz_default_hidden"></div>
<pre id="comment_preview_text" class="bz_comment_text"></pre> <div id="comment_preview_text" class="bz_comment_text"></div>
</div> </div>
[% END %] [% END %]
[% IF feature_enabled('markdown') AND user.settings.use_markdown.value == 'on' %] [% IF user.use_markdown %]
<div id="comment_markdown"> <div id="comment_markdown">
<input type="checkbox" name="use_markdown" id="use_markdown" value="1" <input type="checkbox" name="use_markdown"
[% "checked=\"checked\"" IF user.settings.use_markdown.value == 'on' %] > id="use_markdown" value="1" checked="checked"
onchange="refresh_markdown_preview([% bug.id FILTER none %])">
<label id="use_markdown_label" for="use_markdown">Use Markdown for this [% terms.comment %]</label> <label id="use_markdown_label" for="use_markdown">Use Markdown for this [% terms.comment %]</label>
(<a href="page.cgi?id=markdown.html" target="_blank" title="View Markdown Syntax Guide">help</a>) (<a href="page.cgi?id=markdown.html" target="_blank" title="View Markdown Syntax Guide">help</a>)
</div> </div>

View File

@ -267,12 +267,12 @@
[%# Don't indent the <pre> block, since then the spaces are displayed in the [%# Don't indent the <pre> block, since then the spaces are displayed in the
# generated HTML # generated HTML
#%] #%]
<pre class="bz_comment_text[% " collapsed" IF comment.collapsed %]" <[% user.use_markdown(comment) ? "div" : "pre" %] class="bz_comment_text[% " collapsed" IF comment.collapsed %]"
[% IF mode == "edit" || comment.collapsed %] [% IF mode == "edit" || comment.collapsed %]
id="comment_text_[% comment.count FILTER none %]" id="comment_text_[% comment.count FILTER none %]"
[% END %]> [% END %]>
[%- comment_text FILTER markdown(bug, comment) -%] [%- comment_text FILTER markdown(bug, comment) -%]
</pre> </[% user.use_markdown(comment) ? "div" : "pre" %]>
[% Hook.process('a_comment-end', 'bug/comments.html.tmpl') %] [% Hook.process('a_comment-end', 'bug/comments.html.tmpl') %]
</div> </div>
[% END %] [% END %]