[%# 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): Myk Melez <myk@mozilla.org>
  #                 Max Kanat-Alexander <mkanat@bugzilla.org>
  #                 Elliotte Martin <elliotte_martin@yahoo.com>
  #                 Guy Pyrzak <guy.pyrzak@gmail.com>
  #                 Reed Loden <reed@reedloden.com>
  #%]

[%# INTERFACE:
  #   field: a Bugzilla::Field object
  #   value: The value of the field for this bug.
  #   override_legal_values (optional): The list of legal values, for select fields.
  #   editable: Whether the field should be displayed as an editable
  #             <input> or as just the plain text of its value.
  #   required: Whether the field should be entered or selected. This can override
  #             the field definition's `is_mandatory` property.
  #   use_buttons: Whether the field should be displayed as rich radio buttons.
  #                Use this for a single-select field with a few options.
  #   allow_dont_change: display the --do_not_change-- option for select fields.
  #   value_span: A colspan for the table cell containing
  #               the field value.
  #   no_tds: boolean; if true, don't display the label <th> or the
  #           wrapping <td> for the field.
  #   bug (optional): The current Bugzilla::Bug being displayed, or a hash
  #                   with default field values being displayed on a page.
  #   aria_label (optional): Accessible label for the form widget.
  #%]

[% SET hidden = 0 %]
[% IF bug AND !field.is_visible_on_bug(bug) %]
  [% SET hidden = 1 %]
[% END %]

[% SET aria_description = '' %]
[% IF help_html.${field.name}.defined %]
  [% SET aria_description = help_html.${field.name} FILTER txt FILTER collapse %]
[% END %]

[% IF NOT no_tds %]
  [% PROCESS "bug/field-label.html.tmpl" %]
  <td class="field_value [% ' bz_hidden_field' IF hidden; ' contains-buttons' IF use_buttons %]"
      id="field_container_[% field.name FILTER html %]"
      [% " colspan=\"$value_span\"" FILTER none IF value_span %]>
[% END %]
[% Hook.process('start_field_column') %]
[% IF editable %]
  [% SWITCH field.type %]
    [% CASE [ constants.FIELD_TYPE_FREETEXT
              constants.FIELD_TYPE_INTEGER ] %]
        <input id="[% field.name FILTER html %]" class="text_input"
               name="[% field.name FILTER html %]"
               value="[% value FILTER html %]" size="40"
               maxlength="[% constants.MAX_FREETEXT_LENGTH FILTER none %]"
               [% IF aria_label %] aria-label="[% aria_label FILTER html %]" [% END %]
               [% IF aria_description %] aria-description="[% aria_description FILTER html %]" [% END %]
               [% IF field.type == constants.FIELD_TYPE_INTEGER %] pattern="\d+[% IF dontchange %]|[% dontchange FILTER html %][% END %]" [% END %]
               [% ' aria-required="true"' IF (field.is_mandatory || required) %]>
    [% CASE [constants.FIELD_TYPE_DATETIME, constants.FIELD_TYPE_DATE] %]
      [% size = (field.type == constants.FIELD_TYPE_DATE) ? 10 : 20 %]
      <input name="[% field.name FILTER html %]" size="[% size FILTER none %]"
             id="[% field.name FILTER html %]"
             value="[% value FILTER html %]"
             [% IF aria_label %] aria-label="[% aria_label FILTER html %]" [% END %]
             [% IF aria_description %] aria-description="[% aria_description FILTER html %]" [% END %]
             [% ' aria-required="true"' IF (field.is_mandatory || required) %]
             onchange="updateCalendarFromField(this)">
      <button type="button" class="calendar_button"
              id="button_calendar_[% field.name FILTER html %]"
              onclick="showCalendar('[% field.name FILTER js %]')">
        <span>Calendar</span>
      </button>

      <div id="con_calendar_[% field.name FILTER html %]"></div>

      <script [% script_nonce FILTER none %]>
        createCalendar('[% field.name FILTER js %]')
      </script>
    [% CASE constants.FIELD_TYPE_BUG_ID %]
        <span id="[% field.name FILTER html %]_input_area">
          <input name="[% field.name FILTER html %]" id="[% field.name FILTER html %]"
                 value="[% value FILTER html %]" size="7"
                 [% IF aria_label %] aria-label="[% aria_label FILTER html %]" [% END %]
                 [% IF aria_description %] aria-description="[% aria_description FILTER html %]" [% END %]
                 [% ' aria-required="true"' IF (field.is_mandatory || required) %]>

        </span>

        [% IF value %]
          [% value FILTER bug_link(value, use_alias => 1) FILTER none %]
        [% END %]
        <span id="[% field.name FILTER html %]_edit_container" class="edit_me bz_default_hidden">
          <button type="button" class="minor"
                  id="[% field.name FILTER html %]_edit_action">Edit</button>
        </span>
        <script [% script_nonce FILTER none %]>
        hideEditableField('[% field.name FILTER js %]_edit_container',
                          '[% field.name FILTER js %]_input_area',
                          '[% field.name FILTER js %]_edit_action',
                          '[% field.name FILTER js %]',
                          "[% value FILTER js %]");
        </script>
    [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT
              constants.FIELD_TYPE_MULTI_SELECT ] %]
        <input type="hidden" id="[% field.name FILTER html %]_dirty">
        [% IF use_buttons %]
        <div role="radiogroup" class="buttons toggle" id="[% field.name FILTER html %]"
             [% IF aria_label %] aria-label="[% aria_label FILTER html %]" [% END %]
             [% IF aria_description %] aria-description="[% aria_description FILTER html %]" [% END %]
             [% ' aria-required="true"' IF (field.is_mandatory || required) %]>
        [% ELSE %]
        <select id="[% field.name FILTER html %]"
                name="[% field.name FILTER html %]"
                [% IF aria_label %] aria-label="[% aria_label FILTER html %]" [% END %]
                [% IF aria_description %] aria-description="[% aria_description FILTER html %]" [% END %]
                [% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %]
                    [% SET field_size = 5 %]
                    [% IF field.legal_values.size < 5 %]
                        [% SET field_size = field.legal_values.size %]
                    [% END %]
                    size="[% field_size FILTER html %]" multiple="multiple"
                    [% ' aria-required="true"' IF (field.is_mandatory || required) %]
                [% END %]
                >
          [% IF allow_dont_change %]
            <option value="[% dontchange FILTER html %]"
                   [% ' selected="selected"' IF value == dontchange %]>
              [% dontchange FILTER html %]
            </option>
          [% END %]
        [% END %]
          [% IF override_legal_values %]
            [% legal_values = override_legal_values %]
          [% ELSE %]
            [% legal_values = field.legal_values %]
          [% END %]
          [% FOREACH legal_value = legal_values %]
            [%
              selected = value.contains(legal_value.name).size;
              NEXT IF NOT legal_value.is_active AND NOT selected;
              option_id = "v" _ legal_value.id _ "_" _ field.name;
              disabled = bug AND !legal_value.is_visible_on_bug(bug);
            %]

            [%# Purpose: hide field values from those who can't change them %]
            [% IF field.name.match("^cf_blocking_") OR
                  field.name.match("^cf_status_") OR
                  field.name.match("^cf_tracking_") OR
                  field.name == "cf_cab_review" OR
                  field.name == "resolution" %]
              [% NEXT UNLESS bug.check_can_change_field(field.name, '---', legal_value.name) OR
                             selected %]
            [% END %]

            [% IF field.name == "resolution" &&
               legal_value.name != bug.resolution %]
              [% r = legal_value.name %]
              [% IF bug.user.canconfirm &&
                    !(bug.user.canedit || bug.user.isreporter) %]
                [% NEXT IF r != "WORKSFORME" && r != "INCOMPLETE" && r != "DUPLICATE" %]
              [% END %]
              [% IF bug.user.isreporter &&
                    !(bug.user.canconfirm || bug.user.canedit) %]
                [% NEXT IF r == "INCOMPLETE" %]
              [% END %]
              [% NEXT IF r == "EXPIRED" %]
            [% END %]

            [% IF use_buttons %]
            [% NEXT IF (field.is_mandatory || required) && legal_value.name == '--' %]
            <div class="item">
              <input id="[% option_id FILTER html %]" type="radio"
                     name="[% field.name FILTER html %]" value="[% legal_value.name FILTER html %]"
                     [%# We always show selected values, even if they should be hidden %]
                     [% IF selected %]checked[% ELSIF disabled %]disabled class="bz_hidden_option"[% END %]>
              <label for="[% option_id FILTER html %]">
                [% IF field.name == 'bug_type'%]
                  <span class="bug-type-label iconic-text" data-type="[% legal_value.name FILTER html %]">
                    <span class="icon" aria-hidden="true"></span>[% legal_value.name FILTER html %]
                  </span>
                [% ELSE %]
                  [%- display_value(field.name, legal_value.name) FILTER html ~%]
                [% END %]
              </label>
            </div>
            [% ELSE %]
            <option id="[% option_id FILTER html %]" value="[% legal_value.name FILTER html %]"
                    [%# We always show selected values, even if they should be hidden %]
                    [% IF selected %]selected[% ELSIF disabled %]disabled class="bz_hidden_option"[% END %]>
              [%- display_value(field.name, legal_value.name) FILTER html ~%]
            </option>
            [% END %]
          [% END %]
        [% IF use_buttons %]
        </div>
        [% ELSE %]
        </select>
        [% END %]
        [%# When you pass an empty multi-select in the web interface,
          # it doesn't appear at all in the CGI object. Instead of
          # forcing all users of process_bug to always specify every
          # multi-select, we have this field defined if the multi-select
          # field is defined, and then if this is passed but the multi-select
          # isn't, we know that the multi-select was emptied.
        %]
        [% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %]
          <input type="hidden" name="defined_[% field.name FILTER html %]">
        [% END %]

     [% CASE constants.FIELD_TYPE_TEXTAREA %]
       <div id="[% field.name FILTER html %]_edit_container" class="bz_default_hidden">
         <div>
           <button type="button" class="minor"
                   id="[% field.name FILTER html %]_edit_action">Edit</button>
         </div>
         [% IF value %]
           <pre class="field_textarea_readonly">[% value FILTER html %]</pre>
         [% END %]
       </div>
       <div id="[% field.name FILTER html %]_input">
         [% INCLUDE global/textarea.html.tmpl
            id = field.name name = field.name minrows = 4 maxrows = 8
            aria_label = aria_label aria_description = aria_description
            cols = 60 defaultcontent = value mandatory = (field.is_mandatory || required) %]
       </div>
       <script [% script_nonce FILTER none %]>
         hideEditableField('[% field.name FILTER js %]_edit_container',
                           '[% field.name FILTER js %]_input',
                           '[% field.name FILTER js %]_edit_action',
                           '[% field.name FILTER js %]',
                           '[% value FILTER js %]',
                           '',
                           true);
       </script>
     [% CASE constants.FIELD_TYPE_BUG_URLS %]
       [% IF bug.id && value.size %]
         <ul class="bug_urls">
         [% FOREACH bug_url = value %]
           <li>
             [% PROCESS bug_url_link bug_url = bug_url %]
             <label><input type="checkbox" value="[% bug_url.name FILTER html %]"
                           [% IF aria_label %] aria-label="[% aria_label FILTER html %]" [% END %]
                           [% IF aria_description %] aria-description="[% aria_description FILTER html %]" [% END %]
                           name="remove_[% field.name FILTER html %]">
               Remove</label>
           </li>
         [% END %]
         </ul>
       [% END %]
       [% IF Param('use_see_also') %]
         <span id="container_showhide_[% field.name FILTER html %]"
               class="bz_default_hidden">
           (<a href="#" id="showhide_[% field.name FILTER html %]">add</a>)
         </span>
         <div id="container_[% field.name FILTER html %]">
           <input type="text" id="[% field.name FILTER html %]" size="40"
                  class="text_input" name="[% field.name FILTER html %]"
                  [% IF !bug.id %] value="[% value FILTER html %]"[% END %]>
         </div>
         [% IF bug.id %]
           <script [% script_nonce FILTER none %]>
             setupEditLink('[% field.name FILTER js %]');
           </script>
         [% END %]
       [% END %]
     [% CASE constants.FIELD_TYPE_KEYWORDS %]
       <input type="text" id="[% field.name FILTER html %]" size="40"
              class="text_input bz_autocomplete_values"
              name="[% field.name FILTER html %]"
              data-values="[% field.name FILTER html %]"
              [% IF aria_label %] aria-label="[% aria_label FILTER html %]" [% END %]
              [% IF aria_description %] aria-description="[% aria_description FILTER html %]" [% END %]
              value="[% value FILTER html %]">
       <script [% script_nonce FILTER none %]>
          if (typeof BUGZILLA.autocomplete_values === 'undefined')
            BUGZILLA.autocomplete_values = [];
          BUGZILLA.autocomplete_values['[% field.name FILTER js %]'] = [
            [%- FOREACH keyword = active_keywords %]
              [%- %]"[% keyword.name FILTER js %]"
              [%- "," IF NOT loop.last %][% END %]];
       </script>
     [% CASE constants.FIELD_TYPE_EXTENSION %]
       [% Hook.process('editable') %]
  [% END %]
[% ELSE %]
  [% SWITCH field.type %]
    [% CASE constants.FIELD_TYPE_TEXTAREA %]
      <div class="uneditable_textarea">[% value FILTER html %]</div>
    [% CASE constants.FIELD_TYPE_BUG_ID %]
      [% IF value %]
          [% value FILTER bug_link(value, use_alias => 1) FILTER none %]
      [% END %]
    [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT
              constants.FIELD_TYPE_MULTI_SELECT ] %]
      [% FOREACH val = value %]
        [% display_value(field.name, val) FILTER html %]
        [% ', ' UNLESS loop.last() %]
      [% END %]
    [% CASE constants.FIELD_TYPE_BUG_URLS %]
      [% '<ul class="bug_urls">' IF value.size %]
        [% FOREACH bug_url = value %]
          <li>
            [% PROCESS bug_url_link bug_url = bug_url %]
          </li>
        [% END %]
      [% '</ul>' IF value.size %]
    [% CASE constants.FIELD_TYPE_EXTENSION %]
      [% Hook.process('non_editable') %]
    [% CASE %]
      [% value.join(', ') FILTER html %]
  [% END %]
[% END %]

[% IF bug && field.name == 'component' %]
  (<a href="[% basepath FILTER none %]buglist.cgi?component=[% bug.component FILTER uri %]&amp;product=[% bug.product FILTER uri %]&amp;bug_status=__open__"
      target="_blank">show other [% terms.bugs %]</a>)
[% END %]

[% Hook.process('end_field_column') %]
[% '</td>' IF NOT no_tds %]

[%# for reverse relationships, we show this pseudo-field after the main field %]
[% IF bug.id && field.is_relationship %]
    [% extra_field_item = {} %]
    [% extra_field_item.header = field.reverse_desc _ ":" FILTER html %]
    [% extra_field_item.data = BLOCK %]
        [% FOREACH depbug = bug.related_bugs(field) %]
            [% depbug.id FILTER bug_link(depbug, use_alias => 1) FILTER none %][% " " %]
        [% END %]
    [% END %]
[% ELSE %]
    [% extra_field_item = '' %]
[% END %]

[% BLOCK bug_url_link %]
  [% IF bug_url.isa('Bugzilla::BugUrl::Bugzilla::Local') %]
    [% bug_url.target_bug_id FILTER bug_link(bug_url.target_bug_id, use_alias => 1) FILTER none %]
  [% ELSE %]
    <a href="[% bug_url.name FILTER html %]">
      [% bug_url.name FILTER html %]</a>
  [% END %]
[% END %]
