[%# The contents of this file are subject to the Mozilla Public
  # License Version 1.1 (the "License"); you may not use this file
  # except in compliance with the License. You may obtain a copy of
  # the License at http://www.mozilla.org/MPL/
  #
  # Software distributed under the License is distributed on an "AS
  # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  # implied. See the License for the specific language governing
  # rights and limitations under the License.
  #
  # The Original Code is the Bugzilla Bug Tracking System.
  #
  # The Initial Developer of the Original Code is Netscape Communications
  # Corporation. Portions created by Netscape are
  # Copyright (C) 1998 Netscape Communications Corporation. All
  # Rights Reserved.
  #
  # Contributor(s): Gervase Markham <gerv@gerv.net>
  #                 Max Kanat-Alexander <mkanat@bugzilla.org>
  #                 Shane H. W. Travis <travis@sedsystems.ca>
  #%]

[% PROCESS bug/time.html.tmpl %]

<script src="[% 'js/comments.js' FILTER version %]">
</script>

<script [% script_nonce FILTER none %]>
<!--
  /* 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.
 %]
[% IF (start_at > 0) %]
    [% 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 count >= start_at %]
    [% PROCESS a_comment %]
  [% END %]

  [% count = count + increment %]
[% 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;">Collapse All Comments</a></li>
      <li><a href="#" onclick="toggle_all_comments('expand');
                               return false;">Expand All Comments</a></li>
      [% IF Param('comment_taggers_group') %]
        <li><div id="comment_tags_collapse_expand_container"></div></li>
      [% END %]
    </ul>
  [% END %]
</td>
</tr></table>

[%############################################################################%]
[%# Block for individual comments                                            #%]
[%############################################################################%]

[% BLOCK a_comment %]
  [% 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_default_collapsed" IF comment.collapsed %]
                [% " bz_comment_hilite" IF marks.${comment.count} %]
                [% " bz_first_comment" IF comment.count == description %]">
      [% IF comment.count == 0 %]
        [% class_name = "bz_first_comment_head" %]
        [% comment_label = "Description" %]
      [% ELSE %]
        [% class_name = "bz_comment_head" %]
        [% comment_label = "Comment " _ 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 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 %]
            [% IF comment.collapsed %]
              </span>
            [% END %]
            <script [% script_nonce FILTER none %]>
              addCollapseLink([% comment.count %], [% comment.collapsed FILTER js %], 'Toggle comment display');
            </script>
          </span>
        [% ELSIF comment.collapsed %]
          <span class="bz_comment_actions">
            <script [% script_nonce FILTER none %]>
              addCollapseLink([% comment.count %], [% comment.collapsed FILTER js %], 'Toggle comment display');
            </script>
          </span>
        [% END %]

        [% 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 %]">
            <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 %]">Private</label>
          </div>
        [% END %]

        <span role="heading" aria-level="2" class="bz_comment_number">
          <a
             href="[% basepath FILTER none %]show_bug.cgi?id=[% bug.bug_id %]#c[% comment.count %]">
            [%- comment_label FILTER html %]</a>
        </span>

        <span class="bz_comment_user">
          [% 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.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 hidden ([% comment.tags.join(', ') FILTER html %])
          </span>
        [% END %]
      </div>

      [% IF user.is_timetracker &&
            (comment.work_time > 0 || comment.work_time < 0) %]
         <br>
         Additional hours worked:
         [% 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
                   [% " bz_default_hidden" UNLESS comment.tags.size %]">
          <span id="ct_[% comment.count %]">
            [% IF comment.tags.size %]
              <script [% script_nonce FILTER none %]>
                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 %]
