diff options
Diffstat (limited to 'template/en/default/bug/comments.html.tmpl')
-rw-r--r-- | template/en/default/bug/comments.html.tmpl | 163 |
1 files changed, 137 insertions, 26 deletions
diff --git a/template/en/default/bug/comments.html.tmpl b/template/en/default/bug/comments.html.tmpl index e3099d94a..e0226257e 100644 --- a/template/en/default/bug/comments.html.tmpl +++ b/template/en/default/bug/comments.html.tmpl @@ -25,8 +25,65 @@ <script src="[% 'js/comments.js' FILTER mtime %]" type="text/javascript"> </script> +<script type="text/javascript"> +<!-- + /* Adds the reply text to the 'comment' textarea */ + 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" */ + 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; + [% END %] + + [% IF user.is_insider %] + if (document.getElementById('isprivate_' + real_id).checked) { + document.getElementById('newcommentprivacy').checked = 'checked'; + updateCommentTagControl(document.getElementById('newcommentprivacy'), 'comment'); + } + [% END %] + + /* Remove embedded links to attachment details */ + replytext = replytext.replace(/(attachment\s+\d+)(\s+\[[^\[\n]+\])+/gi, '$1'); + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } + + function toggleCommentWrap(a, id) { + var spans = document.getElementById('comment_text_' + id).getElementsByTagName('span'); + var old_class; + var new_class; + if (a.innerHTML == 'wrap') { + a.innerHTML = 'unwrap'; + old_class = 'quote'; + new_class = 'quote_wrapped'; + } else { + a.innerHTML = 'wrap'; + old_class = 'quote_wrapped'; + new_class = 'quote'; + } + for (var i = 0, l = spans.length; i < l; i++) { + if (spans[i].className == old_class) + spans[i].className = new_class; + } + return false; + } +//--> +</script> + [% DEFAULT start_at = 0 mode = "show" %] [% sort_order = user.settings.comment_sort_order.value %] +[% user_cache = template_cache.users %] [%# NOTE: (start_at > 0) means we came here from a midair collision, # in which case we don't care what the user's preference is. @@ -35,23 +92,36 @@ [% sort_order = "oldest_to_newest" %] [% END %] + +[%# Set up the variables as needed, depending on the sort order %] +[% IF sort_order == "oldest_to_newest" %] + [% count = 0 %] + [% description = 0 %] + [% increment = 1 %] +[% ELSE %] + [% increment = -1 %] + [% IF sort_order == "newest_to_oldest" %] + [% count = comments.size - 1 %] + [% description = 0 %] + [% ELSIF sort_order == "newest_to_oldest_desc_first" %] + [% count = comments.size %] + [% description = comments.size %] + [% END %] +[% END %] + +[% Hook.process("comment_banner") %] + <!-- This auto-sizes the comments and positions the collapse/expand links to the right. --> <table class="bz_comment_table" cellpadding="0" cellspacing="0"><tr> <td> [% FOREACH comment = comments %] - [% IF comment.count >= start_at %] + [% IF count >= start_at %] [% PROCESS a_comment %] [% END %] -[% END %] - -[% IF user.settings.comment_box_position.value == "before_comments" && user.id %] - <div class="bz_add_comment"> - <a href="#" - onclick="return goto_add_comments();"> - Add Comment</a> - </div> + + [% count = count + increment %] [% END %] [%# Note: this template is used in multiple places; if you use this hook, @@ -63,15 +133,13 @@ <td> [% IF mode == "edit" %] <ul class="bz_collapse_expand_comments"> - <li><a href="#" onclick="toggle_all_comments('collapse'); + <li><a href="#" onclick="toggle_all_comments('collapse'); return false;">Collapse All Comments</a></li> <li><a href="#" onclick="toggle_all_comments('expand'); return false;">Expand All Comments</a></li> - [% IF user.settings.comment_box_position.value == "after_comments" && user.id %] - <li class="bz_add_comment"><a href="#" - onclick="return goto_add_comments('bug_status_bottom');"> - Add Comment</a></li> - [% END %] + [% IF Param('comment_taggers_group') %] + <li><div id="comment_tags_collapse_expand_container"></div></li> + [% END %] </ul> [% END %] </td> @@ -82,13 +150,13 @@ [%############################################################################%] [% BLOCK a_comment %] - [% RETURN IF comment.is_private AND ! user.is_insider %] + [% RETURN IF comment.is_private AND NOT (user.is_insider || user.id == comment.author.id) %] [% comment_text = comment.body_full %] [% RETURN IF comment_text == '' AND (comment.work_time - 0) != 0 AND !user.is_timetracker %] <div id="c[% comment.count %]" class="bz_comment[% " bz_private" IF comment.is_private %] [% " bz_comment_hilite" IF marks.${comment.count} %] - [% " bz_first_comment" IF comment.count == 0 %]"> + [% " bz_first_comment" IF comment.count == description %]"> [% IF comment.count == 0 %] [% class_name = "bz_first_comment_head" %] [% comment_label = "Description" %] @@ -101,14 +169,28 @@ [% IF mode == "edit" %] <span class="bz_comment_actions"> - <script type="text/javascript"><!-- - addReplyLink([% comment.count %], [% comment.id %]); - addCollapseLink([% comment.count %], 'Toggle comment display'); // --> + [% IF comment_text.search("(?:^>|\n>)") %] + [<a class="bz_wrap_link" href="#" + onclick="return toggleCommentWrap(this, [% comment.count %])">wrap</a>] + [% END %] + [% IF bug.check_can_change_field('longdesc', 1, 0) %] + [% IF user.can_tag_comments %] + [<a href="#" + onclick="YAHOO.bugzilla.commentTagging.toggle([% comment.id %], [% comment.count %]);return false">tag</a>] + [% END %] + [<a class="bz_reply_link" href="#add_comment" + [% IF user.settings.quote_replies.value != 'off' %] + onclick="replyToComment('[% comment.count %]', '[% comment.id %]', '[% comment.author.name || comment.author.nick FILTER html FILTER js %]'); return false;" + [% END %] + >reply</a>] + [% END %] + <script type="text/javascript"> + addCollapseLink([% comment.count %], [% comment.collapsed FILTER js %], 'Toggle comment display'); </script> </span> [% END %] - [% IF mode == "edit" && user.is_insider %] + [% IF mode == "edit" && user.is_insider && bug.check_can_change_field('longdesc', 0, 1) %] <div class="bz_private_checkbox"> <input type="hidden" value="1" name="defined_isprivate_[% comment.id %]"> @@ -128,12 +210,21 @@ </span> <span class="bz_comment_user"> - [% INCLUDE global/user.html.tmpl who = comment.author %] - </span> + [% who = comment.author %] + [% Hook.process('user-image', 'bug/comments.html.tmpl') %] + [%# No need to recreate the exact same template if we already have it. %] + [% commenter_id = comment.author.id %] + [% UNLESS user_cache.$commenter_id %] + [% user_cache.$commenter_id = BLOCK %] + [% INCLUDE global/user.html.tmpl who = comment.author %] + [% END %] + [% END %] + [% user_cache.$commenter_id FILTER none %] + [% Hook.process('user', 'bug/comments.html.tmpl') %] + </span> <span class="bz_comment_user_images"> - [% FOREACH group = comment.author.direct_group_membership %] - [% NEXT UNLESS group.icon_url %] + [% FOREACH group = comment.author.groups_with_icon %] <img src="[% group.icon_url FILTER html %]" alt="[% group.name FILTER html %]" title="[% group.name FILTER html %] - [% group.description FILTER html %]"> @@ -152,12 +243,32 @@ [% PROCESS formattimeunit time_unit=comment.work_time %] [% END %] + [% IF user.id && Param('comment_taggers_group') %] + <div id="comment_tag_[% comment.count FILTER html %]" + class="bz_comment_tags[% " collapsed" IF comment.collapsed %] + [% " bz_default_hidden" UNLESS comment.tags.size %]"> + <span id="ct_[% comment.count %]"> + [% IF comment.tags.size %] + <script> + YAHOO.bugzilla.commentTagging.showTags([% comment.id FILTER none %], + [% comment.count FILTER none %], [ + [% FOREACH tag = comment.tags %] + [%~%]'[% tag FILTER js %]'[% "," UNLESS loop.last %] + [% END %] + [%~%]]); + </script> + [% END %] + </span> + </div> + [% END %] + [%# Don't indent the <pre> block, since then the spaces are displayed in the # generated HTML #%] -<pre class="bz_comment_text" +<pre class="bz_comment_text[% " collapsed" IF comment.collapsed %]" [% ' id="comment_text_' _ comment.count _ '"' IF mode == "edit" %]> [%- comment_text FILTER quoteUrls(bug, comment) -%] </pre> </div> + [% Hook.process('a_comment-end', 'bug/comments.html.tmpl') %] [% END %] |