field.html.tmpl 9.3 KB
[%# 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>
  #%]

[%# 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.
  #   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.
  #   desc_url: string; Normally the label of a non-custom field links to
  #             fields.html. If you want it to link elsewhere, specify the
  #             relative URL you want to link to, here. Remember to call
  #             url_quote on any query string arguments.
  #   bug (optional): The current Bugzilla::Bug being displayed, or a hash 
  #                   with default field values being displayed on a page.
  #%]

[% SET hidden = 0 %]
[% IF field.visibility_field.defined AND bug
      AND !field.visibility_value.is_set_on_bug(bug) 
%]
  [% SET hidden = 1 %]
[% END %]

[% IF NOT no_tds %]
  <th class="field_label [% ' bz_hidden_field' IF hidden %]"
      id="field_label_[% field.name FILTER html %]">
    [% IF editable %]
      <label for="[% field.name FILTER html %]">
    [% END %]
      [% IF desc_url %]
        <a href="[% desc_url FILTER html %]">
      [% ELSIF !field.custom %]
        <a href="page.cgi?id=fields.html#[% field.name FILTER url_quote %]">
      [% END -%]
        [% field_descs.${field.name} FILTER html %]:
      [%- '</a>' IF (!field.custom || desc_url) %]
    [% '</label>' IF editable %]
  </th>
[% END %]

[% IF NOT no_tds %]
<td class="field_value [% ' bz_hidden_field' IF hidden %]"
    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 %]
        <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 %]">
    [% CASE constants.FIELD_TYPE_DATETIME %]
      <input name="[% field.name FILTER html %]" size="20"
             id="[% field.name FILTER html %]"
             value="[% value FILTER html %]"
             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 type="text/javascript">
        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">
        </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">
          (<a href="#" id="[% field.name FILTER html %]_edit_action">edit</a>)
        </span>
        <script type="text/javascript">
        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 ] %]
        <select id="[% field.name FILTER html %]" 
                name="[% field.name FILTER html %]" 
                [% 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"
                [% END %]
                >
          [% IF allow_dont_change %]
            <option value="[% dontchange FILTER html %]"
                   [% ' selected="selected"' IF value == dontchange %]>
              [% dontchange FILTER html %]
            </option>
          [% END %]
          [% IF override_legal_values %]
            [% legal_values = override_legal_values %]
          [% ELSE %]
            [% legal_values = field.legal_values %]
          [% END %]
          [% FOREACH legal_value = legal_values %]
            <option value="[% legal_value.name FILTER html %]"
                    id="v[% legal_value.id FILTER html %]_
                        [%- field.name FILTER html %]"
              [%# We always show selected values, even if they should be
                # hidden %]
              [% IF value.contains(legal_value.name).size %]
                selected="selected"
              [% ELSIF bug AND !legal_value.is_visible_on_bug(bug) %]
                class="bz_hidden_option" disabled="disabled"
              [% END %]>
              [%- display_value(field.name, legal_value.name) FILTER html ~%]
            </option>
          [% END %]
        </select>
        [%# 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 %]

        <script type="text/javascript">
        <!--
          initHidingOptionsForIE('[% field.name FILTER js %]');
          [%+ INCLUDE "bug/field-events.js.tmpl" field = field %]
        //-->
        </script>

     [% CASE constants.FIELD_TYPE_TEXTAREA %]
       [% INCLUDE global/textarea.html.tmpl
           id = field.name name = field.name minrows = 4 maxrows = 8
           cols = 60 defaultcontent = value %]
     [% CASE constants.FIELD_TYPE_BUG_URLS %]
       [% '<ul class="bug_urls">' IF value.size %]
       [% FOREACH url = value %]
         <li>
           <a href="[% url FILTER html %]">[% url FILTER html %]</a>
           [% IF editable %]
             <label><input type="checkbox" value="[% url FILTER html %]"
                           name="remove_[% field.name FILTER html %]">
               Remove</label>
           [% END %]
         </li>
       [% END %]
       [% '</ul>' IF value.size %]

       [% IF editable && Param('use_see_also') %]
         <label for="[% field.name FILTER html %]">
           <strong>Add [% terms.Bug %] URLs:</strong>
         </label><br>
         <input type="text" id="[% field.name FILTER html %]" size="40"
                class="text_input" name="[% field.name FILTER html %]">
       [% END %]
  [% END %]
[% ELSIF field.type == constants.FIELD_TYPE_TEXTAREA %]
  <div class="uneditable_textarea">[% value FILTER wrap_comment(60)
                                            FILTER html %]</div>
[% ELSIF field.type == constants.FIELD_TYPE_BUG_ID %]
    [% IF value %]  
        [% value FILTER bug_link(value, use_alias => 1) FILTER none %]
    [% END %]
[% ELSE %]
  [% value.join(', ') FILTER html %]
[% 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 %]