[%# 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. #%] [% PROCESS bug/time.html.tmpl %] <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 = "(Ответ " + name + " на комментарий #" + 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 %] /* <textarea id="comment"> */ var textarea = document.getElementById('comment'); if (textarea.value != replytext) { textarea.value += replytext; } textarea.focus(); } //--> </script> [% DEFAULT mode = "show" %] [% user_cache = template_cache.users %] [% can_edit_comments = bug.check_can_change_field('longdesc', 0, 1) %] [% can_tag_comments = feature_enabled('jsonrpc') AND user.can_tag_comments %] <!-- This auto-sizes the comments and positions the collapse/expand links to the right. --> <table class="bz_comment_table"> <tr> <td> [% PROCESS display_comments %] [% IF mode == "edit" && user.id && user.settings.comment_box_position.value == "before_comments" %] <div class="bz_add_comment"> <a href="#" onclick="return goto_add_comments();"> Добавить комментарий</a> </div> [% END %] [%# Note: this template is used in multiple places; if you use this hook, # make sure you are aware of this fact. #%] [% Hook.process("aftercomments") %] </td> <td> [% IF mode == "edit" %] <ul class="bz_collapse_expand_comments"> <li><a href="#" onclick="toggle_all_comments('collapse'); return false;">Свернуть все комментарии</a></li> <li><a href="#" onclick="toggle_all_comments('expand'); return false;">Развернуть все комментарии</a></li> [% IF Param('comment_taggers_group') %] <li><div id="comment_tags_collapse_expand_container"></div></li> [% END %] [% 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');"> Добавить комментарий</a></li> [% END %] </ul> [% END %] </td> </tr></table> [%############################################################################%] [%# Block for individual comments #%] [%############################################################################%] [% BLOCK display_comments %] [% FOREACH comment = comments %] [% NEXT IF comment.is_private AND NOT (user.is_insider || user.id == comment.author.id) %] [% comment_text = comment.body_full %] [% NEXT 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_default_collapsed" IF comment.collapsed %] [% " bz_comment_hilite" IF marks.${comment.count} %] [% " bz_first_comment" IF comment.count == 0 %]"> [% IF comment.count == 0 %] [% class_name = "bz_first_comment_head" %] [% comment_label = "Описание" %] [% ELSE %] [% class_name = "bz_comment_head" %] [% comment_label = "Комментарий " _ comment.count %] [% END %] <div class="[% class_name FILTER html %]"> [% IF mode == "edit" %] <span class="bz_comment_actions"> [% IF comment.collapsed %] <span class="bz_collapsed_actions"> [% END %] [% IF can_edit_comments %] [% IF can_tag_comments %] [<a href="#" onclick="YAHOO.bugzilla.commentTagging.toggle([% comment.id %], [% comment.count %]);return false">Тэг</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 %] >ответить</a>] [% END %] [% IF comment.collapsed %] </span> [% END %] <script type="text/javascript"> addCollapseLink([% comment.count %], [% comment.collapsed FILTER js %], 'Скрыть/показать комментарий'); </script> </span> [% ELSIF comment.collapsed %] <span class="bz_comment_actions"> <script type="text/javascript"> addCollapseLink([% comment.count %], [% comment.collapsed FILTER js %], 'Скрыть/показать комментарий'); </script> </span> [% END %] [% IF mode == "edit" && can_edit_comments && user.is_insider %] <div class="bz_private_checkbox"> <input type="hidden" value="1" name="defined_isprivate_[% comment.id %]"> <input type="checkbox" name="isprivate_[% comment.id %]" value="1" id="isprivate_[% comment.id %]" onClick="updateCommentPrivacy(this, [% comment.count %])" [% " checked=\"checked\"" IF comment.is_private %]> <label for="isprivate_[% comment.id %]">Конфиденциально</label> </div> [% END %] <span class="bz_comment_number"> <a href="show_bug.cgi?id=[% bug.bug_id %]#c[% comment.count %]"> [%- comment_label FILTER html %]</a> </span> <span class="bz_comment_user"> [%# 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 %] </span> <span class="bz_comment_user_images"> [% 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 %]"> [% END %] </span> <span class="bz_comment_time"> [%+ comment.creation_ts FILTER time %] </span> [% IF comment.collapsed %] <span id="cr[% comment.count %]" class="bz_comment_collapse_reason" title="[% comment.author.name || comment.author.login FILTER html %] [%~ %] [[% comment.creation_ts FILTER time %]]"> Комментарий скрыт ([% comment.tags.join(', ') FILTER html %]) </span> [% END %] </div> [% IF user.is_timetracker && (comment.work_time > 0 || comment.work_time < 0) %] <br> Отработанное время: [% 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"> <span id="ct_[% comment.count %]" class="[% 'bz_default_hidden' UNLESS comment.tags.size %]"> [% 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[% " collapsed" IF comment.collapsed %]" [% IF mode == "edit" || comment.collapsed %] id="comment_text_[% comment.count FILTER none %]" [% END %]> [%- comment_text FILTER quoteUrls(bug, comment) -%] </pre> [% Hook.process('a_comment-end', 'bug/comments.html.tmpl') %] </div> [% END %] [% END %]