diff options
30 files changed, 49 insertions, 1135 deletions
diff --git a/Bugzilla.pm b/Bugzilla.pm index 048e72d48..c3f5780b0 100644 --- a/Bugzilla.pm +++ b/Bugzilla.pm @@ -397,13 +397,6 @@ sub logout_request { # there. Don't rely on it: use Bugzilla->user->login instead! } -sub markdown { - return if !Bugzilla->feature('markdown'); - - require Bugzilla::Markdown; - return $_[0]->request_cache->{markdown} ||= Bugzilla::Markdown->new(); -} - sub job_queue { require Bugzilla::JobQueue; return $_[0]->request_cache->{job_queue} ||= Bugzilla::JobQueue->new(); @@ -954,10 +947,6 @@ Returns the local timezone of the Bugzilla installation, as a DateTime::TimeZone object. This detection is very time consuming, so we cache this information for future references. -=item C<markdown> - -The current L<Markdown|Bugzilla::Markdown> object, to be used for Markdown rendering. - =item C<job_queue> Returns a L<Bugzilla::JobQueue> that you can use for queueing jobs. diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index aec7c1e82..7b97d1ff8 100644 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -694,8 +694,6 @@ sub create { unless defined $params->{rep_platform}; # Make sure a comment is always defined. $params->{comment} = '' unless defined $params->{comment}; - $params->{is_markdown} = 0 - unless defined $params->{is_markdown} && $params->{is_markdown} eq '1'; $class->check_required_create_fields($params); $params = $class->run_create_validators($params); @@ -709,7 +707,6 @@ sub create { my $blocked = delete $params->{blocked}; my $keywords = delete $params->{keywords}; my $creation_comment = delete $params->{comment}; - my $is_markdown = delete $params->{is_markdown}; my $see_also = delete $params->{see_also}; # We don't want the bug to appear in the system until it's correctly @@ -797,7 +794,6 @@ sub create { # We now have a bug id so we can fill this out $creation_comment->{'bug_id'} = $bug->id; - $creation_comment->{'is_markdown'} = $is_markdown; # Insert the comment. We always insert a comment on bug creation, # but sometimes it's blank. @@ -2430,8 +2426,7 @@ sub set_all { # there are lots of things that want to check if we added a comment. $self->add_comment($params->{'comment'}->{'body'}, { isprivate => $params->{'comment'}->{'is_private'}, - work_time => $params->{'work_time'}, - is_markdown => $params->{'comment'}->{'is_markdown'} }); + work_time => $params->{'work_time'} }); } if (exists $params->{alias} && $params->{alias}{set}) { diff --git a/Bugzilla/Comment.pm b/Bugzilla/Comment.pm index 3dabe6702..c235b8d30 100644 --- a/Bugzilla/Comment.pm +++ b/Bugzilla/Comment.pm @@ -43,7 +43,6 @@ use constant DB_COLUMNS => qw( already_wrapped type extra_data - is_markdown ); use constant UPDATE_COLUMNS => qw( @@ -66,7 +65,6 @@ use constant VALIDATORS => { work_time => \&_check_work_time, thetext => \&_check_thetext, isprivate => \&_check_isprivate, - is_markdown => \&Bugzilla::Object::check_boolean, extra_data => \&_check_extra_data, type => \&_check_type, }; @@ -179,7 +177,6 @@ sub body { return $_[0]->{'thetext'}; } sub bug_id { return $_[0]->{'bug_id'}; } sub creation_ts { return $_[0]->{'bug_when'}; } sub is_private { return $_[0]->{'isprivate'}; } -sub is_markdown { return $_[0]->{'is_markdown'}; } sub work_time { # Work time is returned as a string (see bug 607909) return 0 if $_[0]->{'work_time'} + 0 == 0; @@ -277,7 +274,6 @@ sub body_full { sub set_is_private { $_[0]->set('isprivate', $_[1]); } sub set_type { $_[0]->set('type', $_[1]); } sub set_extra_data { $_[0]->set('extra_data', $_[1]); } -sub set_is_markdown { $_[0]->set('is_markdown', $_[1]); } sub add_tag { my ($self, $tag) = @_; @@ -526,10 +522,6 @@ C<string> Time spent as related to this comment. C<boolean> Comment is marked as private. -=item C<is_markdown> - -C<boolean> Whether this comment needs L<Markdown|Bugzilla::Markdown> rendering to be applied. - =item C<already_wrapped> If this comment is stored in the database word-wrapped, this will be C<1>. @@ -625,16 +617,6 @@ A string, the full text of the comment as it would be displayed to an end-user. =cut -=head2 Modifiers - -=over - -=item C<set_is_markdown> - -Sets whether this comment needs L<Markdown|Bugzilla::Markdown> rendering to be applied. - -=back - =head1 B<Methods in need of POD> =over diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm index 4c1f11003..4f5ec581d 100644 --- a/Bugzilla/Constants.pm +++ b/Bugzilla/Constants.pm @@ -193,8 +193,6 @@ use Memoize; AUDIT_REMOVE MOST_FREQUENT_THRESHOLD - - MARKDOWN_TAB_WIDTH ); @Bugzilla::Constants::EXPORT_OK = qw(contenttypes); @@ -637,10 +635,6 @@ use constant AUDIT_REMOVE => '__remove__'; # on the "Most frequently reported bugs" page. use constant MOST_FREQUENT_THRESHOLD => 2; -# The number of spaces used to represent each tab character -# by Markdown engine -use constant MARKDOWN_TAB_WIDTH => 2; - sub bz_locations { # Force memoize() to re-compute data per project, to avoid # sharing the same data across different installations. diff --git a/Bugzilla/DB/Schema.pm b/Bugzilla/DB/Schema.pm index ebe2cb426..d1c1dc7e9 100644 --- a/Bugzilla/DB/Schema.pm +++ b/Bugzilla/DB/Schema.pm @@ -410,8 +410,7 @@ use constant ABSTRACT_SCHEMA => { DEFAULT => 'FALSE'}, type => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '0'}, - extra_data => {TYPE => 'varchar(255)'}, - is_markdown => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'} + extra_data => {TYPE => 'varchar(255)'} ], INDEXES => [ longdescs_bug_id_idx => [qw(bug_id work_time)], diff --git a/Bugzilla/Install.pm b/Bugzilla/Install.pm index 5a2266e36..07bc9d6c3 100644 --- a/Bugzilla/Install.pm +++ b/Bugzilla/Install.pm @@ -90,8 +90,6 @@ sub SETTINGS { bugmail_new_prefix => { options => ['on', 'off'], default => 'on' }, # 2013-07-26 joshi_sunil@in.com -- Bug 669535 possible_duplicates => { options => ['on', 'off'], default => 'on' }, - # 2014-05-24 koosha.khajeh@gmail.com -- Bug 1014164 - use_markdown => { options => ['on', 'off'], default => 'on' }, } }; diff --git a/Bugzilla/Install/DB.pm b/Bugzilla/Install/DB.pm index ab02fe41d..8ffde11fd 100644 --- a/Bugzilla/Install/DB.pm +++ b/Bugzilla/Install/DB.pm @@ -726,10 +726,6 @@ sub update_table_definitions { # 2014-08-11 sgreen@redhat.com - Bug 1012506 _update_alias(); - # 2014-08-14 koosha.khajeh@gmail.com - Bug 330707 - $dbh->bz_add_column('longdescs', 'is_markdown', - {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'}); - ################################################################ # New --TABLE-- changes should go *** A B O V E *** this point # ################################################################ diff --git a/Bugzilla/Install/Requirements.pm b/Bugzilla/Install/Requirements.pm index db3d7b028..48e992db7 100644 --- a/Bugzilla/Install/Requirements.pm +++ b/Bugzilla/Install/Requirements.pm @@ -396,14 +396,6 @@ sub OPTIONAL_MODULES { version => '0', feature => ['memcached'], }, - - # Markdown - { - package => 'Text-Markdown', - module => 'Text::Markdown', - version => '1.0.26', - feature => ['markdown'], - } ); my $extra_modules = _get_extension_requirements('OPTIONAL_MODULES'); @@ -427,7 +419,6 @@ use constant FEATURE_FILES => ( 'Bugzilla/JobQueue/*', 'jobqueue.pl'], patch_viewer => ['Bugzilla/Attachment/PatchReader.pm'], updates => ['Bugzilla/Update.pm'], - markdown => ['Bugzilla/Markdown.pm'], memcached => ['Bugzilla/Memcache.pm'], ); diff --git a/Bugzilla/Markdown.pm b/Bugzilla/Markdown.pm deleted file mode 100644 index 353c2ff6a..000000000 --- a/Bugzilla/Markdown.pm +++ /dev/null @@ -1,520 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This Source Code Form is "Incompatible With Secondary Licenses", as -# defined by the Mozilla Public License, v. 2.0. - -package Bugzilla::Markdown; - -use 5.10.1; -use strict; -use warnings; - -use Bugzilla::Constants; -use Bugzilla::Template; - -use Digest::MD5 qw(md5_hex); - -use parent qw(Text::Markdown); - -@Bugzilla::Markdown::EXPORT = qw(new); - -# Regex to match balanced [brackets]. See Friedl's -# "Mastering Regular Expressions", 2nd Ed., pp. 328-331. -our ($g_nested_brackets, $g_nested_parens); -$g_nested_brackets = qr{ - (?> # Atomic matching - [^\[\]]+ # Anything other than brackets - | - \[ - (??{ $g_nested_brackets }) # Recursive set of nested brackets - \] - )* -}x; -# Doesn't allow for whitespace, because we're using it to match URLs: -$g_nested_parens = qr{ - (?> # Atomic matching - [^()\s]+ # Anything other than parens or whitespace - | - \( - (??{ $g_nested_parens }) # Recursive set of nested brackets - \) - )* -}x; - -our %g_escape_table; -foreach my $char (split //, '\\`*_{}[]()>#+-.!~') { - $g_escape_table{$char} = md5_hex($char); -} -$g_escape_table{'<'} = md5_hex('<'); - -sub new { - my $invocant = shift; - my $class = ref $invocant || $invocant; - return $class->SUPER::new(tab_width => MARKDOWN_TAB_WIDTH, - # Bugzilla uses HTML not XHTML - empty_element_suffix => '>'); -} - -sub markdown { - my $self = shift; - my $text = shift; - my $user = Bugzilla->user; - - if ($user->settings->{use_markdown}->{is_enabled} - && $user->setting('use_markdown') eq 'on') - { - return $self->SUPER::markdown($text, @_); - } - - return Bugzilla::Template::quoteUrls($text); -} - -sub _Markdown { - my $self = shift; - my $text = shift; - - $text = Bugzilla::Template::quoteUrls($text, undef, undef, undef, undef, 1); - - return $self->SUPER::_Markdown($text, @_); -} - -sub _RunSpanGamut { - # These are all the transformations that occur *within* block-level - # tags like paragraphs, headers, and list items. - - my ($self, $text) = @_; - - $text = $self->_DoCodeSpans($text); - $text = $self->_EscapeSpecialCharsWithinTagAttributes($text); - $text = $self->_EscapeSpecialChars($text); - - $text = $self->_DoAnchors($text); - - # Strikethroughs is Bugzilla's extension - $text = $self->_DoStrikethroughs($text); - - $text = $self->_DoAutoLinks($text); - $text = $self->_EncodeAmpsAndAngles($text); - $text = $self->_DoItalicsAndBold($text); - - $text =~ s/\n/<br$self->{empty_element_suffix}\n/g; - - return $text; -} - -# Override to check for HTML-escaped <>" chars. -sub _StripLinkDefinitions { -# -# Strips link definitions from text, stores the URLs and titles in -# hash references. -# - my ($self, $text) = @_; - my $less_than_tab = $self->{tab_width} - 1; - - # Link defs are in the form: ^[id]: url "optional title" - while ($text =~ s{ - ^[ ]{0,$less_than_tab}\[(.+)\]: # id = \$1 - [ \t]* - \n? # maybe *one* newline - [ \t]* - (?:<)?<a\s+href="(.+?)">\2</a>(?:>)? # url = \$2 - [ \t]* - \n? # maybe one newline - [ \t]* - (?: - (?<=\s) # lookbehind for whitespace - (?:"|\() - (.+?) # title = \$3 - (?:"|\)) - [ \t]* - )? # title is optional - (?:\n+|\Z) - }{}omx) { - $self->{_urls}{lc $1} = $self->_EncodeAmpsAndAngles( $2 ); # Link IDs are case-insensitive - if ($3) { - $self->{_titles}{lc $1} = $3; - $self->{_titles}{lc $1} =~ s/"/"/g; - } - - } - - return $text; -} - -# We need to look for HTML-escaped '<' and '>' (i.e. < and >). -# We also remove Email linkification from the original implementation -# as it is already done in Bugzilla's quoteUrls(). -sub _DoAutoLinks { - my ($self, $text) = @_; - - $text =~ s{(?:<|<)((?:https?|ftp):[^'">\s]+?)(?:>|>)}{<a href="$1">$1</a>}gi; - return $text; -} - -# The main reasons for overriding this method are -# resolving URL conflicts with Bugzilla's quoteUrls() -# and also changing '"' to '"' in regular expressions wherever needed. -sub _DoAnchors { -# -# Turn Markdown link shortcuts into <a> tags. -# - my ($self, $text) = @_; - - # We revert linkifications of non-email links and only - # those links whose URL and title are the same because - # this way we can be sure that link is generated by quoteUrls() - $text =~ s@<a \s+ href="(?! mailto ) (.+?)">\1</a>@$1@xmg; - - # - # First, handle reference-style links: [link text] [id] - # - $text =~ s{ - ( # wrap whole match in $1 - \[ - ($g_nested_brackets) # link text = $2 - \] - - [ ]? # one optional space - (?:\n[ ]*)? # one optional newline followed by spaces - - \[ - (.*?) # id = $3 - \] - ) - }{ - my $whole_match = $1; - my $link_text = $2; - my $link_id = lc $3; - - if ($link_id eq "") { - $link_id = lc $link_text; # for shortcut links like [this][]. - } - - $link_id =~ s{[ ]*\n}{ }g; # turn embedded newlines into spaces - - $self->_GenerateAnchor($whole_match, $link_text, $link_id); - }xsge; - - # - # Next, inline-style links: [link text](url "optional title") - # - $text =~ s{ - ( # wrap whole match in $1 - \[ - ($g_nested_brackets) # link text = $2 - \] - \( # literal paren - [ \t]* - ($g_nested_parens) # href = $3 - [ \t]* - ( # $4 - ("|') # quote char = $5 - (.*?) # Title = $6 - \5 # matching quote - [ \t]* # ignore any spaces/tabs between closing quote and ) - )? # title is optional - \) - ) - }{ - my $result; - my $whole_match = $1; - my $link_text = $2; - my $url = $3; - my $title = $6; - - # Remove Bugzilla quoteUrls() linkification - if ($url =~ /^a href="/ && $url =~ m|</a$|) { - $url =~ s/^[^>]+>//; - $url =~ s@</a$@@; - } - - # Limit URL to HTTP/HTTPS links - $url = "http://$url" unless $url =~ m!^https?://!i; - - $self->_GenerateAnchor($whole_match, $link_text, undef, $url, $title); - }xsge; - - # - # Last, handle reference-style shortcuts: [link text] - # These must come last in case you've also got [link test][1] - # or [link test](/foo) - # - $text =~ s{ - ( # wrap whole match in $1 - \[ - ([^\[\]]+) # link text = $2; can't contain '[' or ']' - \] - ) - }{ - my $result; - my $whole_match = $1; - my $link_text = $2; - (my $link_id = lc $2) =~ s{[ ]*\n}{ }g; # lower-case and turn embedded newlines into spaces - - $self->_GenerateAnchor($whole_match, $link_text, $link_id); - }xsge; - - return $text; -} - -# The purpose of overriding this function is to add support -# for a Github Flavored Markdown (GFM) feature called 'Multiple -# underscores in words'. The standard markdown specification -# specifies the underscore for making the text emphasized/bold. -# However, some variable names in programming languages contain underscores -# and we do not want a part of those variables to look emphasized/bold. -# Instead, we render them as the way they originally are. -sub _DoItalicsAndBold { - my ($self, $text) = @_; - - # Handle at beginning of lines: - $text =~ s{ (^__ (?=\S) (.+?[*_]*) (?<=\S) __ (?!\S)) } - { - my $result = _has_multiple_underscores($2) ? $1 : "<strong>$2</strong>"; - $result; - }gsxe; - - $text =~ s{ ^\*\* (?=\S) (.+?[*_]*) (?<=\S) \*\* }{<strong>$1</strong>}gsx; - - $text =~ s{ (^_ (?=\S) (.+?) (?<=\S) _ (?!\S)) } - { - my $result = _has_multiple_underscores($2) ? $1 : "<em>$2</em>"; - $result; - }gsxe; - - $text =~ s{ ^\* (?=\S) (.+?) (?<=\S) \* }{<em>$1</em>}gsx; - - # <strong> must go first: - $text =~ s{ ( (?<=\W) __ (?=\S) (.+?[*_]*) (?<=\S) __ (?!\S) ) } - { - my $result = _has_multiple_underscores($2) ? $1 : "<strong>$2</strong>"; - $result; - }gsxe; - - - $text =~ s{ (?<=\W) \*\* (?=\S) (.+?[*_]*) (?<=\S) \*\* }{<strong>$1</strong>}gsx; - - $text =~ s{ ( (?<=\W) _ (?=\S) (.+?) (?<=\S) _ (?!\S) ) } - { - my $result = _has_multiple_underscores($2) ? $1 : "<em>$2</em>"; - $result; - }gsxe; - - $text =~ s{ (?<=\W) \* (?=\S) (.+?) (?<=\S) \* }{<em>$1</em>}gsx; - - # And now, a second pass to catch nested strong and emphasis special cases - $text =~ s{ ( (?<=\W) __ (?=\S) (.+?[*_]*) (?<=\S) __ (\S*) ) } - { - my $result = _has_multiple_underscores($3) ? $1 : "<strong>$2</strong>$3"; - $result; - }gsxe; - - $text =~ s{ (?<=\W) \*\* (?=\S) (.+?[*_]*) (?<=\S) \*\* }{<strong>$1</strong>}gsx; - $text =~ s{ ( (?<=\W) _ (?=\S) (.+?) (?<=\S) _ (\S*) ) } - { - my $result = _has_multiple_underscores($3) ? $1 : "<em>$2</em>$3"; - $result; - }gsxe; - - $text =~ s{ (?<=\W) \* (?=\S) (.+?) (?<=\S) \* }{<em>$1</em>}gsx; - - return $text; -} - -sub _DoStrikethroughs { - my ($self, $text) = @_; - - $text =~ s{ ^ ~~ (?=\S) ([^~]+?) (?<=\S) ~~ (?!~) }{<del>$1</del>}gsx; - $text =~ s{ (?<=_|[^~\w]) ~~ (?=\S) ([^~]+?) (?<=\S) ~~ (?!~) }{<del>$1</del>}gsx; - - return $text; -} - -# The original _DoCodeSpans() uses the 's' modifier in its regex -# which prevents _DoCodeBlocks() to match GFM fenced code blocks. -# We copy the code from the original implementation and remove the -# 's' modifier from it. -sub _DoCodeSpans { - my ($self, $text) = @_; - - $text =~ s@ - (?<!\\) # Character before opening ` can't be a backslash - (`+) # $1 = Opening run of ` - (.+?) # $2 = The code block - (?<!`) - \1 # Matching closer - (?!`) - @ - my $c = "$2"; - $c =~ s/^[ \t]*//g; # leading whitespace - $c =~ s/[ \t]*$//g; # trailing whitespace - $c = $self->_EncodeCode($c); - "<code>$c</code>"; - @egx; - - return $text; -} - -# Override to add GFM Fenced Code Blocks -sub _DoCodeBlocks { - my ($self, $text) = @_; - - $text =~ s{ - ^ `{3,} [\s\t]* \n - ( # $1 = the entire code block - (?: .* \n+)+? - ) - `{3,} [\s\t]* $ - }{ - my $codeblock = $1; - my $result; - - $codeblock = $self->_EncodeCode($codeblock); - $codeblock = $self->_Detab($codeblock); - $codeblock =~ s/\n\z//; # remove the trailing newline - - $result = "\n\n<pre><code>" . $codeblock . "</code></pre>\n\n"; - $result; - }egmx; - - # And now do the standard code blocks - $text = $self->SUPER::_DoCodeBlocks($text); - - return $text; -} - -sub _DoBlockQuotes { - my ($self, $text) = @_; - - $text =~ s{ - ( # Wrap whole match in $1 - (?: - ^[ \t]*>[ \t]? # '>' at the start of a line - .+\n # rest of the first line - (?:.+\n)* # subsequent consecutive lines - \n* # blanks - )+ - ) - }{ - my $bq = $1; - $bq =~ s/^[ \t]*>[ \t]?//gm; # trim one level of quoting - $bq =~ s/^[ \t]+$//mg; # trim whitespace-only lines - $bq = $self->_RunBlockGamut($bq, {wrap_in_p_tags => 1}); # recurse - $bq =~ s/^/ /mg; - # These leading spaces screw with <pre> content, so we need to fix that: - $bq =~ s{(\s*<pre>.+?</pre>)}{ - my $pre = $1; - $pre =~ s/^ //mg; - $pre; - }egs; - "<blockquote>\n$bq\n</blockquote>\n\n"; - }egmx; - - return $text; -} - -sub _EncodeCode { - my ($self, $text) = @_; - - # We need to unescape the escaped HTML characters in code blocks. - # These are the reverse of the escapings done in Bugzilla::Util::html_quote() - $text =~ s/</</g; - $text =~ s/>/>/g; - $text =~ s/"/"/g; - $text =~ s/@/@/g; - # '&' substitution must be the last one, otherwise a literal like '>' - # will turn to '>' because '&' is already changed to '&' in Bugzilla::Util::html_quote(). - # In other words, html_quote() will change '>' to '&gt;' and then we will - # change '&gt' -> '>' -> '>' if we write this substitution as the first one. - $text =~ s/&/&/g; - $text =~ s{<a \s+ href="(?:mailto:)? (.+?)"> \1 </a>}{$1}xmgi; - $text = $self->SUPER::_EncodeCode($text); - $text =~ s/~/$g_escape_table{'~'}/go; - # Encode '<' to prevent URLs from getting linkified in code spans - $text =~ s/</$g_escape_table{'<'}/go; - - return $text; -} - -sub _EncodeBackslashEscapes { - my ($self, $text) = @_; - - $text = $self->SUPER::_EncodeBackslashEscapes($text); - $text =~ s/\\~/$g_escape_table{'~'}/go; - - return $text; -} - -sub _UnescapeSpecialChars { - my ($self, $text) = @_; - - $text = $self->SUPER::_UnescapeSpecialChars($text); - $text =~ s/$g_escape_table{'~'}/~/go; - $text =~ s/$g_escape_table{'<'}/</go; - - return $text; -} - -# Check if the passed string is of the form multiple_underscores_in_a_word. -# To check that, we first need to make sure that the string does not contain -# any white-space. Then, if the string is composed of non-space chunks which -# are bound together with underscores, the string has the desired form. -sub _has_multiple_underscores { - my $string = shift; - return 0 unless defined($string) && length($string); - return 0 if $string =~ /[\t\s]+/; - return 1 if scalar (split /_/, $string) > 1; - return 0; -} - -1; - -__END__ - -=head1 NAME - -Bugzilla::Markdown - Generates HTML output from structured plain-text input. - -=head1 SYNOPSIS - - use Bugzilla::Markdown; - - my $markdown = Bugzilla::Markdown->new(); - print $markdown->markdown($text); - -=head1 DESCRIPTION - -Bugzilla::Markdown implements a Markdown engine that produces -an HTML-based output from a given plain-text input. - -The majority of the implementation is done by C<Text::Markdown> -CPAN module. It also applies the linkifications done in L<Bugzilla::Template> -to the input resulting in an output which is a combination of both Markdown -structures and those defined by Bugzilla itself. - -=head2 Accessors - -=over - -=item C<markdown> - -C<string> Produces an HTML-based output string based on the structures -and format defined in the given plain-text input. - -=over - -=item B<Params> - -=over - -=item C<text> - -C<string> A plain-text string which includes Markdown structures. - -=back - -=back - -=back diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm index 7ce1be72b..bb8ff3b74 100644 --- a/Bugzilla/Template.pm +++ b/Bugzilla/Template.pm @@ -148,11 +148,10 @@ sub get_format { # If you want to modify this routine, read the comments carefully sub quoteUrls { - my ($text, $bug, $comment, $user, $bug_link_func, $for_markdown) = @_; + my ($text, $bug, $comment, $user, $bug_link_func) = @_; return $text unless $text; $user ||= Bugzilla->user; $bug_link_func ||= \&get_bug_link; - $for_markdown ||= 0; # We use /g for speed, but uris can have other things inside them # (http://foo/bug#3 for example). Filtering that out filters valid @@ -223,11 +222,10 @@ sub quoteUrls { $text = html_quote($text); - unless ($for_markdown) { - # Color quoted text - $text =~ s~^(>.+)$~<span class="quote">$1</span >~mg; - $text =~ s~</span >\n<span class="quote">~\n~g; - } + # Color quoted text + $text =~ s~^(>.+)$~<span class="quote">$1</span >~mg; + $text =~ s~</span >\n<span class="quote">~\n~g; + # mailto: # Use |<nothing> so that $1 is defined regardless # @ is the encoded '@' character. @@ -858,24 +856,6 @@ sub create { 1 ], - markdown => [ sub { - my ($context, $bug, $comment, $user) = @_; - return sub { - my $text = shift; - return unless $text; - - if (Bugzilla->feature('markdown') - && ((ref($comment) eq 'HASH' && $comment->{is_markdown}) - || (ref($comment) eq 'Bugzilla::Comment' && $comment->is_markdown))) - { - return Bugzilla->markdown->markdown($text); - } - return quoteUrls($text, $bug, $comment, $user); - }; - }, - 1 - ], - bug_link => [ sub { my ($context, $bug, $options) = @_; return sub { diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm index fa2674366..acedc65f2 100644 --- a/Bugzilla/User.pm +++ b/Bugzilla/User.pm @@ -632,14 +632,6 @@ sub is_bug_ignored { 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 # ########################## @@ -2631,12 +2623,6 @@ C<string> The current summary of the bug. Returns true if the user does not want email notifications for the 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 =head2 Saved Recent Bug Lists diff --git a/Bugzilla/WebService/Bug.pm b/Bugzilla/WebService/Bug.pm index f50bb6aee..7c28b1d8d 100644 --- a/Bugzilla/WebService/Bug.pm +++ b/Bugzilla/WebService/Bug.pm @@ -331,9 +331,7 @@ sub render_comment { Bugzilla->switch_to_shadow_db(); my $bug = $params->{id} ? Bugzilla::Bug->check($params->{id}) : undef; - my $markdown = $params->{markdown} ? 1 : 0; - my $tmpl = $markdown ? '[% text FILTER markdown(bug, { is_markdown => 1 }) %]' : '[% text FILTER markdown(bug) %]'; - + my $tmpl = '[% text FILTER quoteUrls(bug) %]'; my $html; my $template = Bugzilla->template; $template->process( @@ -352,16 +350,15 @@ sub _translate_comment { : undef; my $comment_hash = { - id => $self->type('int', $comment->id), - bug_id => $self->type('int', $comment->bug_id), - creator => $self->type('email', $comment->author->login), - time => $self->type('dateTime', $comment->creation_ts), + id => $self->type('int', $comment->id), + bug_id => $self->type('int', $comment->bug_id), + creator => $self->type('email', $comment->author->login), + time => $self->type('dateTime', $comment->creation_ts), creation_time => $self->type('dateTime', $comment->creation_ts), - is_private => $self->type('boolean', $comment->is_private), - is_markdown => $self->type('boolean', $comment->is_markdown), - text => $self->type('string', $comment->body_full), + is_private => $self->type('boolean', $comment->is_private), + text => $self->type('string', $comment->body_full), attachment_id => $self->type('int', $attach_id), - count => $self->type('int', $comment->count), + count => $self->type('int', $comment->count), }; # Don't load comment tags unless enabled @@ -825,20 +822,10 @@ sub add_attachment { $attachment->update($timestamp); my $comment = $params->{comment} || ''; - - my $is_markdown = 0; - if (ref $params->{comment} eq 'HASH') { - $is_markdown = $params->{comment}->{is_markdown}; - $comment = $params->{comment}->{body}; - } - - ThrowUserError('markdown_disabled') if $is_markdown && !_is_markdown_enabled(); - - $attachment->bug->add_comment($comment, - { is_markdown => $is_markdown, - isprivate => $attachment->isprivate, - type => CMT_ATTACHMENT_CREATED, - extra_data => $attachment->id }); + $attachment->bug->add_comment($comment, + { isprivate => $attachment->isprivate, + type => CMT_ATTACHMENT_CREATED, + extra_data => $attachment->id }); push(@created, $attachment); } $_->bug->update($timestamp) foreach @created; @@ -884,14 +871,6 @@ sub update_attachment { my $flags = delete $params->{flags}; my $comment = delete $params->{comment}; - my $is_markdown = 0; - - if (ref $comment eq 'HASH') { - $is_markdown = $comment->{is_markdown}; - $comment = $comment->{body}; - } - - ThrowUserError('markdown_disabled') if $is_markdown && !_is_markdown_enabled(); # Update the values foreach my $attachment (@attachments) { @@ -911,10 +890,9 @@ sub update_attachment { if ($comment = trim($comment)) { $attachment->bug->add_comment($comment, - { is_markdown => $is_markdown, - isprivate => $attachment->isprivate, - type => CMT_ATTACHMENT_UPDATED, - extra_data => $attachment->id }); + { isprivate => $attachment->isprivate, + type => CMT_ATTACHMENT_UPDATED, + extra_data => $attachment->id }); } $changes = translate($changes, ATTACHMENT_MAPPED_RETURNS); @@ -971,13 +949,9 @@ sub add_comment { if (defined $params->{private}) { $params->{is_private} = delete $params->{private}; } - - ThrowUserError('markdown_disabled') if $params->{is_markdown} && !_is_markdown_enabled(); - # Append comment - $bug->add_comment($comment, { isprivate => $params->{is_private}, - is_markdown => $params->{is_markdown}, - work_time => $params->{work_time} }); + $bug->add_comment($comment, { isprivate => $params->{is_private}, + work_time => $params->{work_time} }); # Capture the call to bug->update (which creates the new comment) in # a transaction so we're sure to get the correct comment_id. @@ -1425,14 +1399,6 @@ sub _add_update_tokens { } } -sub _is_markdown_enabled { - my $user = Bugzilla->user; - - return Bugzilla->feature('markdown') - && $user->settings->{use_markdown}->{is_enabled} - && $user->setting('use_markdown') eq 'on'; -} - 1; __END__ @@ -2110,10 +2076,6 @@ may be deprecated and removed in a future release. C<boolean> True if this comment is private (only visible to a certain group called the "insidergroup"), False otherwise. -=item is_markdown - -C<boolean> True if this comment needs Markdown processing, false otherwise. - =back =item B<Errors> @@ -3131,9 +3093,6 @@ don't want it to be assigned to the component owner. =item C<comment_is_private> (boolean) - If set to true, the description is private, otherwise it is assumed to be public. -=item C<is_markdown> (boolean) - If set to true, the description -has Markdown structures, otherwise it is a normal text. - =item C<groups> (array) - An array of group names to put this bug into. You can see valid group names on the Permissions tab of the Preferences screen, or, if you are an administrator, @@ -3289,8 +3248,6 @@ Bugzilla B<4.4>. =item REST API call added in Bugzilla B<5.0>. -=item C<is_markdown> option added in Bugzilla B<5.0>. - =back =back @@ -3350,21 +3307,7 @@ C<text/plain> or C<image/png>. =item C<comment> -C<string> or hash. A comment to add along with this attachment. If C<comment> -is a hash, it has the following keys: - -=over - -=item C<body> - -C<string> The body of the comment. - -=item C<is_markdown> - -C<boolean> If set to true, the comment has Markdown structures; otherwise, it -is an ordinary text. - -=back +C<string> A comment to add along with this attachment. =item C<is_patch> @@ -3442,10 +3385,6 @@ the type id value to update or add a flag. The flag type is inactive and cannot be used to create new flags. -=item 140 (Markdown Disabled) - -You tried to set the C<is_markdown> flag of the comment to true but the Markdown feature is not enabled. - =item 600 (Attachment Too Large) You tried to attach a file that was larger than Bugzilla will accept. @@ -3481,8 +3420,6 @@ You set the "data" field to an empty string. =item REST API call added in Bugzilla B<5.0>. -=item C<is_markdown> added in Bugzilla B<5.0>. - =back =back @@ -3529,21 +3466,7 @@ attachment. =item C<comment> -C<string> or hash: An optional comment to add to the attachment's bug. If C<comment> is -a hash, it has the following keys: - -=over - -=item C<body> - -C<string> The body of the comment to be added. - -=item C<is_markdown> - -C<boolean> If set to true, the comment has Markdown structures; otherwise it is a normal -text. - -=back +C<string> An optional comment to add to the attachment's bug. =item C<content_type> @@ -3692,11 +3615,6 @@ the type id value to update or add a flag. The flag type is inactive and cannot be used to create new flags. -=item 140 (Markdown Disabled) - -You tried to set the C<is_markdown> flag of the C<comment> to true but Markdown feature is -not enabled. - =item 601 (Invalid MIME Type) You specified a C<content_type> argument that was blank, not a valid @@ -3757,9 +3675,6 @@ you did not set the C<comment> parameter. =item C<is_private> (boolean) - If set to true, the comment is private, otherwise it is assumed to be public. -=item C<is_markdown> (boolean) - If set to true, the comment has Markdown -structures, otherwise it is a normal text. - =item C<work_time> (double) - Adds this many hours to the "Hours Worked" on the bug. If you are not in the time tracking group, this value will be ignored. @@ -3801,11 +3716,6 @@ You tried to add a private comment, but don't have the necessary rights. You tried to add a comment longer than the maximum allowed length (65,535 characters). -=item 140 (Markdown Disabled) - -You tried to set the C<is_markdown> flag to true but the Markdown feature -is not enabled. - =back =item B<History> @@ -3828,8 +3738,6 @@ code of 32000. =item REST API call added in Bugzilla B<5.0>. -=item C<is_markdown> option added in Bugzilla B<5.0>. - =back =back diff --git a/Bugzilla/WebService/Constants.pm b/Bugzilla/WebService/Constants.pm index db50611cb..d612ebc75 100644 --- a/Bugzilla/WebService/Constants.pm +++ b/Bugzilla/WebService/Constants.pm @@ -101,7 +101,6 @@ use constant WS_ERROR_CODE => { comment_id_invalid => 111, comment_too_long => 114, comment_invalid_isprivate => 117, - markdown_disabled => 140, # Comment tagging comment_tag_disabled => 125, comment_tag_invalid => 126, diff --git a/docs/en/rst/using.rst b/docs/en/rst/using.rst index eb887093b..da0d19450 100644 --- a/docs/en/rst/using.rst +++ b/docs/en/rst/using.rst @@ -404,7 +404,7 @@ You can use it to find a bug by its number or its alias, too. You'll find the Quicksearch box in Bugzilla's footer area. On Bugzilla's front page, there is an additional -`quicksearcgh help <../../../page.cgi?id=quicksearch.html>`_ +`Help <../../page.cgi?id=quicksearch.html>`_ link which details how to use it. .. _casesensitivity: @@ -757,23 +757,6 @@ Don't use sigs in comments. Signing your name ("Bill") is acceptable, if you do it out of habit, but full mail/news-style four line ASCII art creations are not. -.. _markdown: - -Markdown --------- - -Markdown lets you write your comments in a structured plain-text format and -have your comments generated as HTML. For example, you may use Markdown for -making a part of your comment look italic or bold in the generated HTML. Bugzilla -supports most of the structures defined by `standard Markdown <http://daringfireball.net/projects/markdown/basics>`_. -but does NOT support inline images and inline HTML. For a complete reference on -supported Markdown structures, please see the `syntax help <../../../page.cgi?id=markdown.html>`_ -link next to the markdown checkbox for new comments. - -To use the Markdown feature, make sure that ``Enable Markdown support for comments`` is set to ``on`` -in your :ref:`userpreferences` and that you also check the ``Use Markdown for this comment`` option below -the comment box when you want to submit a new comment. - .. _comment-wrapping: Server-Side Comment Wrapping diff --git a/js/field.js b/js/field.js index c24603988..5589bc498 100644 --- a/js/field.js +++ b/js/field.js @@ -983,33 +983,17 @@ function initDirtyFieldTracking() { */ var last_comment_text = ''; -var last_markdown_cb_value = null; -var comment_textarea_width = null; -var comment_textarea_height = null; -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) { +function show_comment_preview(bug_id) { var Dom = YAHOO.util.Dom; var comment = document.getElementById('comment'); var preview = document.getElementById('comment_preview'); - var markdown_cb = document.getElementById('use_markdown'); if (!comment || !preview) return; - if (Dom.hasClass('comment_preview_tab', 'active_comment_tab') && !refresh) - return; + if (Dom.hasClass('comment_preview_tab', 'active_comment_tab')) return; - if (!comment_textarea_width) { - 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; + preview.style.width = (comment.clientWidth - 4) + 'px'; + preview.style.height = comment.offsetHeight + 'px'; var comment_tab = document.getElementById('comment_tab'); Dom.addClass(comment, 'bz_default_hidden'); @@ -1023,7 +1007,7 @@ function show_comment_preview(bug_id, refresh) { Dom.addClass('comment_preview_error', 'bz_default_hidden'); - if (last_comment_text == comment.value && last_markdown_cb_value == markdown_cb.checked) + if (last_comment_text == comment.value) return; Dom.addClass('comment_preview_text', 'bz_default_hidden'); @@ -1043,14 +1027,7 @@ function show_comment_preview(bug_id, refresh) { document.getElementById('comment_preview_text').innerHTML = data.result.html; Dom.addClass('comment_preview_loading', '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_markdown_cb_value = markdown_cb.checked; } }, failure: function(res) { @@ -1066,8 +1043,7 @@ function show_comment_preview(bug_id, refresh) { params: { Bugzilla_api_token: BUGZILLA.api_token, id: bug_id, - text: comment.value, - markdown: (markdown_cb != null) && markdown_cb.checked ? 1 : 0 + text: comment.value } }) ); diff --git a/post_bug.cgi b/post_bug.cgi index 9da8faec1..4680d6804 100755 --- a/post_bug.cgi +++ b/post_bug.cgi @@ -118,7 +118,6 @@ foreach my $field (qw(cc groups)) { $bug_params{$field} = [$cgi->param($field)]; } $bug_params{'comment'} = $comment; -$bug_params{'is_markdown'} = $cgi->param('use_markdown'); my @multi_selects = grep {$_->type == FIELD_TYPE_MULTI_SELECT && $_->enter_bug} Bugzilla->active_custom_fields; diff --git a/process_bug.cgi b/process_bug.cgi index b3d979960..fbd302974 100755 --- a/process_bug.cgi +++ b/process_bug.cgi @@ -233,13 +233,9 @@ if (should_set('keywords')) { $set_all_fields{keywords}->{$action} = $cgi->param('keywords'); } if (should_set('comment')) { - my $is_markdown = ($user->use_markdown - && $cgi->param('use_markdown') eq '1') ? 1 : 0; - $set_all_fields{comment} = { body => scalar $cgi->param('comment'), is_private => scalar $cgi->param('comment_is_private'), - is_markdown => $is_markdown, }; } if (should_set('see_also')) { diff --git a/skins/standard/global.css b/skins/standard/global.css index 60e06af73..74005319a 100644 --- a/skins/standard/global.css +++ b/skins/standard/global.css @@ -243,15 +243,6 @@ textarea { font-family: monospace; } - - blockquote { - border-left: 0.2em solid #CCC; - color: #65379C; - padding: 0; - margin-left: 0.5em; - margin-bottom: -1em; - white-space: pre; - } /* generic (end) */ /* Links that control whether or not something is visible. */ @@ -319,7 +310,7 @@ div#docslinks { } /* tbody.file pre is for the Diff view of attachments. */ -pre.bz_comment_text, .uneditable_textarea, tbody.file pre { +.bz_comment_text, .uneditable_textarea, tbody.file pre { font-family: monospace; white-space: pre-wrap; } @@ -732,16 +723,12 @@ input.required, select.required, span.required_explanation { width: auto; } -.comment_preview_pre { - white-space: pre; -} - #comment_preview_loading { font-style: italic; } #comment { - margin: 0; + margin: 0px 0px 1em 0px; } /*******************/ diff --git a/t/004template.t b/t/004template.t index b0ca5a629..d38f9e16b 100644 --- a/t/004template.t +++ b/t/004template.t @@ -88,7 +88,6 @@ foreach my $include_path (@include_paths) { wrap_comment => sub { return $_ }, none => sub { return $_ } , ics => [ sub { return sub { return $_; } }, 1] , - markdown => sub { return $_ } , }, } ); diff --git a/t/008filter.t b/t/008filter.t index 204bbdc43..f0a26d13f 100644 --- a/t/008filter.t +++ b/t/008filter.t @@ -212,7 +212,7 @@ sub directive_ok { return 1 if $directive =~ /FILTER\ (html|csv|js|base64|css_class_quote|ics| quoteUrls|time|uri|xml|lower|html_light| obsolete|inactive|closed|unitconvert| - txt|html_linebreak|markdown|none)\b/x; + txt|html_linebreak|none)\b/x; return 0; } diff --git a/template/en/default/bug/comment.html.tmpl b/template/en/default/bug/comment.html.tmpl index 76054f92a..96cbb63ed 100644 --- a/template/en/default/bug/comment.html.tmpl +++ b/template/en/default/bug/comment.html.tmpl @@ -32,16 +32,6 @@ <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_error" class="bz_default_hidden"></div> - <div id="comment_preview_text" class="bz_comment_text"></div> - </div> -[% END %] - -[% IF user.use_markdown %] - <div id="comment_markdown"> - <input type="checkbox" name="use_markdown" - 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> - (<a href="page.cgi?id=markdown.html" target="_blank" title="View Markdown Syntax Guide">help</a>) + <pre id="comment_preview_text" class="bz_comment_text"></pre> </div> [% END %] diff --git a/template/en/default/bug/comments.html.tmpl b/template/en/default/bug/comments.html.tmpl index 3895691d7..d040e651d 100644 --- a/template/en/default/bug/comments.html.tmpl +++ b/template/en/default/bug/comments.html.tmpl @@ -14,16 +14,13 @@ <script type="text/javascript"> <!-- /* Adds the reply text to the 'comment' textarea */ - function replyToComment(id, real_id, name, text) { + function replyToComment(id, real_id, name) { var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; var replytext = ""; [% IF user.settings.quote_replies.value == 'quoted_reply' %] /* pre id="comment_name_N" */ - - if (text == null) { - var text_elem = document.getElementById('comment_text_'+id); - text = getText(text_elem); - } + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); replytext = prefix + wrapReplyText(text); [% ELSIF user.settings.quote_replies.value == 'simple_reply' %] replytext = prefix; @@ -44,39 +41,6 @@ textarea.focus(); } - - function replyToMarkdownComment(id, real_id, name) { - var textarea = document.getElementById('comment'); - var comment = textarea.value; - textarea.value += "Fetching comment..."; - YAHOO.util.Connect.setDefaultPostHeader('application/json', true); - YAHOO.util.Connect.asyncRequest('POST', 'jsonrpc.cgi', - { - success: function(res) { - var data = YAHOO.lang.JSON.parse(res.responseText); - if (!data.error) { - textarea.value = comment; - var text = data.result.comments[real_id].text; - replyToComment(id, real_id, name, text); - } else { - replyToComment(id, real_id, name, null); - } - }, - failure: function(res) { - /* On failure, quote the comment as plain-text */ - replyToComment(id, real_id, name, null); - } - }, - YAHOO.lang.JSON.stringify({ - version: "1.1", - method: "Bug.comments", - params: { - Bugzilla_api_token: BUGZILLA.api_token, - comment_ids: [real_id], - } - }) - ); - } //--> </script> @@ -162,13 +126,7 @@ [% END %] [<a class="bz_reply_link" href="#add_comment" [% IF user.settings.quote_replies.value != 'off' %] - onclick=" - [% IF feature_enabled('jsonrpc') && comment.is_markdown %] - replyToMarkdownComment('[% comment.count %]', '[% comment.id %]', '[% comment.author.name || comment.author.nick FILTER html FILTER js %]'); return false;" - [% ELSE %] - replyToComment('[% comment.count %]', '[% comment.id %]', '[% comment.author.name || comment.author.nick FILTER html FILTER js %]', null); return false;" - - [% END %] + onclick="replyToComment('[% comment.count %]', '[% comment.id %]', '[% comment.author.name || comment.author.nick FILTER html FILTER js %]'); return false;" [% END %] >reply</a>] [% END %] @@ -267,12 +225,12 @@ [%# Don't indent the <pre> block, since then the spaces are displayed in the # generated HTML #%] -<[% user.use_markdown(comment) ? "div" : "pre" %] class="bz_comment_text[% " collapsed" IF comment.collapsed %]" +<pre class="bz_comment_text[% " collapsed" IF comment.collapsed %]" [% IF mode == "edit" || comment.collapsed %] id="comment_text_[% comment.count FILTER none %]" [% END %]> - [%- comment_text FILTER markdown(bug, comment) -%] -</[% user.use_markdown(comment) ? "div" : "pre" %]> + [%- comment_text FILTER quoteUrls(bug, comment) -%] +</pre> [% Hook.process('a_comment-end', 'bug/comments.html.tmpl') %] </div> [% END %] diff --git a/template/en/default/bug/process/midair.html.tmpl b/template/en/default/bug/process/midair.html.tmpl index f89590df2..17025fee7 100644 --- a/template/en/default/bug/process/midair.html.tmpl +++ b/template/en/default/bug/process/midair.html.tmpl @@ -76,7 +76,6 @@ You have the following choices: <input type="hidden" name="id" value="[% cgi.param("id") FILTER html %]"> <input type="hidden" name="delta_ts" value="[% bug.delta_ts FILTER html %]"> <input type="hidden" name="comment" value="[% cgi.param("comment") FILTER html %]"> - <input type="hidden" name="use_markdown" value="[% cgi.param("use_markdown") FILTER html %]"> <input type="hidden" name="comment_is_private" value="[% cgi.param("comment_is_private") FILTER html %]"> <input type="hidden" name="token" value="[% cgi.param("token") FILTER html %]"> diff --git a/template/en/default/email/bugmail.html.tmpl b/template/en/default/email/bugmail.html.tmpl index b0f4efb45..9473a4459 100644 --- a/template/en/default/email/bugmail.html.tmpl +++ b/template/en/default/email/bugmail.html.tmpl @@ -25,7 +25,7 @@ on [% "$terms.bug $bug.id" FILTER bug_link(bug, { full_url => 1, user => to_user }) FILTER none %] from [% INCLUDE global/user.html.tmpl user = to_user, who = comment.author %]</b> [% END %] - <pre>[% comment.body_full({ wrap => 1 }) FILTER markdown(bug, comment, to_user) %]</pre> + <pre>[% comment.body_full({ wrap => 1 }) FILTER quoteUrls(bug, comment, to_user) %]</pre> </div> [% END %] </p> diff --git a/template/en/default/filterexceptions.pl b/template/en/default/filterexceptions.pl index f5f1bd783..6adbbcb95 100644 --- a/template/en/default/filterexceptions.pl +++ b/template/en/default/filterexceptions.pl @@ -20,7 +20,7 @@ # [% foo.push() %] # TT loop variables - [% loop.count %] # Already-filtered stuff - [% wibble FILTER html %] -# where the filter is one of html|csv|js|quoteUrls|time|uri|xml|markdown|none +# where the filter is one of html|csv|js|quoteUrls|time|uri|xml|none %::safe = ( diff --git a/template/en/default/global/setting-descs.none.tmpl b/template/en/default/global/setting-descs.none.tmpl index ac99094c5..6e3358782 100644 --- a/template/en/default/global/setting-descs.none.tmpl +++ b/template/en/default/global/setting-descs.none.tmpl @@ -44,8 +44,7 @@ "requestee_cc" => "Automatically add me to the CC list of $terms.bugs I am requested to review", "bugmail_new_prefix" => "Add 'New:' to subject line of email sent when a new $terms.bug is filed", "possible_duplicates" => "Display possible duplicates when reporting a new $terms.bug", - "use_markdown" => "Enable Markdown support for $terms.comments" - } + } %] [% Hook.process('settings') %] diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl index e9bdb63c4..a0ae25c08 100644 --- a/template/en/default/global/user-error.html.tmpl +++ b/template/en/default/global/user-error.html.tmpl @@ -1181,9 +1181,6 @@ [%# Used for non-web-based LOGIN_REQUIRED situations. %] You must log in before using this part of [% terms.Bugzilla %]. - [% ELSIF error == "markdown_disabled" %] - Markdown feature is not enabled. - [% ELSIF error == "migrate_config_created" %] The file <kbd>[% file FILTER html %]</kbd> contains configuration variables that must be set before continuing with the migration. diff --git a/template/en/default/pages/linked.html.tmpl b/template/en/default/pages/linked.html.tmpl index ab74470c2..3fcf87952 100644 --- a/template/en/default/pages/linked.html.tmpl +++ b/template/en/default/pages/linked.html.tmpl @@ -18,7 +18,7 @@ <p> <pre class="bz_comment_text"> -[%- cgi.param("text") FILTER markdown FILTER html -%] +[%- cgi.param("text") FILTER quoteUrls FILTER html -%] </pre> </p> @@ -33,7 +33,7 @@ <p> <pre class="bz_comment_text"> -[%- cgi.param("text") FILTER markdown -%] +[%- cgi.param("text") FILTER quoteUrls -%] </pre> </p> diff --git a/template/en/default/pages/markdown.html.tmpl b/template/en/default/pages/markdown.html.tmpl deleted file mode 100644 index 8b43f5f17..000000000 --- a/template/en/default/pages/markdown.html.tmpl +++ /dev/null @@ -1,265 +0,0 @@ -[%# this source code form is subject to the terms of the mozilla public - # license, v. 2.0. if a copy of the mpl was not distributed with this - # file, you can obtain one at http://mozilla.org/mpl/2.0/. - # - # this source code form is "incompatible with secondary licenses", as - # defined by the mozilla public license, v. 2.0. - #%] - -[% INCLUDE global/header.html.tmpl - title = "Markdown Syntax Guide" - bodyclasses = ['narrow_page'] - %] - -<h2>What is Markdown?</h2> - - Markdown is a simple text formatting language that enables you to write your - [%+ terms.comments %] in plain-text and have them generated as HTML. Markdown - in [%+ terms.Bugzilla %] supports the following structures: - - <ul> - <li><a href="#headers">Headers</a></li> - <li><a href="#blockquotes">Blockquotes</a></li> - <li><a href="#emphasis">Emphasis</a></li> - <li><a href="#lists">Lists</a></li> - <li><a href="#code">Code</a></li> - <li><a href="#strikethroughs">Strikethroughs</a></li> - <li><a href="#links">Links</a></li> - </ul> - -<h2 id="headers">Headers</h2> - - You have two options for making headers. First, you may use any number of - equal signs (for first-level header) or dashes (for second-level headers). - - <p> - <pre> - <code> - This is an H1 header - ==================== - - This is an H2 header - -------------------- - </code> - </pre> - </p> - - Second, you can use hash signs at the beginning of the line to specify the - level of the header from 1 to 6. - - <p> - <pre> - <code> - # This is the largest header (H1 level) - ### This is a small header (H3 level) - ###### This is the smallest header (H6 level) - </code> - </pre> - </p> - -<h2 id="blockquotes">Blockquotes</h2> - - Use a closing angle bracket (<code>></code>) at the beginning of the line - to indicate a line as quoted. - - <p> - <pre> - <code> - > Some text to be quoted. - </code> - </pre> - </p> - -<h2 id="emphasis">Emphasis</h2> - - Single underscores or asterisks will make the text italic. Double underscores - or asterisks will make the text bold. - - <p> - <pre> - <code> - _This text will become italic_ - *This text also will become italic* - - __But this one will be bold__ - **And this one as well** - </code> - </pre> - </p> - - Turns into - - <p> - <pre> - <em>This text will become italic</em> - <em>This text also will become italic</em> - <br> - <strong>But this one will be bold</strong> - <strong>And this one as well</strong> - </pre> - </p> - - Use different signs to combine them nestedly in order to avoid ambiguity: - - <p> - <pre> - <code> - _This [% terms.bug %] **must** be resolved ASAP._ - </code> - </pre> - </p> - - <strong>Note:</strong> [% terms.Bugzilla %] will skip emphasizing words that - have the form of <code>multiple_underscore_in_a_word</code>. This measure is - taken to not emphasize words that are possible programming variables. If your - word has this form and you still want it to become emphasized/bold, you must - use single/double asterisks (<code>*</code>) instead of underscores - (<code>_</code>). - -<h2 id="lists">Lists</h2> - - Markdown supports both unordered and ordered lists. - - <h3>Unordered Lists</h3> - - Use asterisks (<code>*</code>), pluses (<code>+</code>) or hyphens - (<code>-</code>) to mark the items of an unordered list. - - <p> - <pre> - <code> - + First item - + Second item - + Third item - </code> - </pre> - </p> - - <h3>Ordered Lists</h3> - - Use a number followed by a period to denote an item of an ordered list. - - <p> - <pre> - <code> - 1. Item one - 4. Item two - 3. Item three - </code> - </pre> - </p> - - <strong>Note:</strong> Your numbers have no effect on the rendered item - numbers and the rendered numbers are automatically generated. Your numbers - are only used to specify the items of an ordered list.<br> - - <p> - A list item can have nested lists recursively: - </p> - - <p> - <pre> - <code> - 1. Item one - 4. Item two - 3. Item three - * First sub-item - * Second sub-item - 5. Item four - </code> - </pre> - </p> - -<h2 id="code">Code</h2> - - To make a part of your text to get generated as a piece of code, use one or - more backticks (<code>`</code>) and close that - part with the same number of backticks. - - <p> - <pre> - <code>Please see the manual for `printf` function.</code> - </pre> - </p> - - If you want to make some lines of code, you need to use 3 or more backticks at - the beginning of a line followed by your code lines and concluded by 3 or more - backticks. - - <p> - <pre> - <code> - See my function: - ``` - int sum(int x, int y) { - return x + y; - } - ``` - </code> - </pre> - </p> - - You can also use a tab or [% constants.MARKDOWN_TAB_WIDTH FILTER html %] or - more spaces at the beginning of each line of your code to make the whole block - look as a code block. Please take care that you might make your lines as code - blocks by inadvertently indenting them. - -<h2 id="strikethroughs">Strikethroughs</h2> - - Surround your text between a pair of two tildes to have your text crossed out. - - <p> - <pre> - <code> - Module ~~Foo~~ is deprecated. - </code> - </pre> - </p> - -<h2 id="links">Links</h2> - - Literal URLs and Email addresses get linkified automatically. Besides that, - you can define links with link texts and titles. You may define your links - either as inline or as a reference. To define a link as inline, put your link - text in square bracket immediately followed by a pair of parentheses which - containts the URL that you want your link to point to and an <em>optional</em> - link title surrounded by quotes. - - <p> - <pre> - <code> - This is [Bugzilla](http://www.bugzilla.org "View Bugzilla Homepage") - [% terms.bug %] tracking system.</code> - This [example link](http://www.example.com) does not have title. - </code> - </pre> - </p> - - To define your links in a reference style, define your links any where in - your [% terms.comment %] with the following format: - - <p> - <pre> - <code> - [bz]: http://www.bugzilla.org "Bugzilla Homepage" - [mz]: http://www.mozilla.org (Mozilla Homepage) - </code> - </pre> - </p> - - That is, define a unique ID for each link in square brackets with their - corresponding URL and optional title in quotes or parentheses. Then, point to - those links simply by writing your link text in square brackets followed by - the ID in another pair of square brackets. - - <p> - <pre> - <code> - [Bugzilla][bz] is open-sourced server software designed to help groups - manage software development. [Mozilla][mz] uses [Bugzilla][bz] to track - issues with Firefox and other projects. - </code> - </pre> - </p> - -[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/setup/strings.txt.pl b/template/en/default/setup/strings.txt.pl index 6de588e6d..7dc8e8bf1 100644 --- a/template/en/default/setup/strings.txt.pl +++ b/template/en/default/setup/strings.txt.pl @@ -101,7 +101,6 @@ END feature_xmlrpc => 'XML-RPC Interface', feature_detect_charset => 'Automatic charset detection for text attachments', feature_typesniffer => 'Sniff MIME type of attachments', - feature_markdown => 'Markdown syntax support for comments', file_remove => 'Removing ##name##...', file_rename => 'Renaming ##from## to ##to##...', |