[%# 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. #%] [%# INTERFACE: # field: a Bugzilla::Field object # value: The value of the field for this bug. # field_hidden (optional): boolean; if true, the field is hidden by default. # 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. # bug (optional): The current Bugzilla::Bug being displayed, or a hash # with default field values being displayed on a page. #%] [% IF NOT no_tds %] [% field_hidden = 0 %] [% IF bug AND !field.is_visible_on_bug(bug) %] [% field_hidden = 1 %] [% END %] [% INCLUDE "bug/field-label.html.tmpl" hidden = field_hidden %] <td class="field_value [% ' bz_hidden_field' IF field_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 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 field.type == constants.FIELD_TYPE_INTEGER %] pattern="-?\d+[% IF dontchange %]|[% dontchange FILTER html %][% END %]" title="The value must be a valid positive or negative integer" [% END %] [% IF field.is_mandatory %] data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %] [% END %]> [% 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 field.is_mandatory %] data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %] [% END %]> <script type="text/javascript"> $(function() { $("#[% field.name FILTER html FILTER js %]").datepicker([% "{constrainInput: false}" IF field.type == constants.FIELD_TYPE_DATETIME %]); }); </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 field.is_mandatory %] data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %] [% END %]> </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 ] %] [%# The 'product' field needs its own template if classifications are enabled. %] [% IF field.name == "product" AND Param('useclassification') %] [% INCLUDE "global/product-select.html.tmpl" id = "product", name = "product", value = value products = override_legal_values %] [% ELSE %] <input type="hidden" id="[% field.name FILTER html %]_dirty"> <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" [% IF field.is_mandatory %] data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %] [% END %] [% 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 %] [% NEXT IF NOT legal_value.is_active AND NOT value.contains(legal_value.name).size %] <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 %] [% END %] <script type="text/javascript"> <!-- initHidingOptionsForIE('[% field.name FILTER js %]'); [%+ INCLUDE "bug/field-events.js.tmpl" field = field, product = bug.product_obj %] //--> </script> [% CASE constants.FIELD_TYPE_TEXTAREA %] <div id="[% field.name FILTER html %]_edit_container" class="bz_default_hidden"> <div> (<a href="#" id="[% field.name FILTER html %]_edit_action">edit</a>) </div> [% IF value %] <pre id="[% field.name FILTER html %]_readonly" 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 cols = 60 defaultcontent = value mandatory = field.is_mandatory %] </div> <script type="text/javascript"> 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 %]" 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 type="text/javascript"> 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 %]" value="[% value FILTER html %]"> <script type="text/javascript"> if (typeof BUGZILLA.autocomplete_values === 'undefined') BUGZILLA.autocomplete_values = []; BUGZILLA.autocomplete_values['[% field.name FILTER js %]'] = [ [%- FOREACH val = possible_values %] [%- %]"[% val FILTER js %]" [%- "," IF NOT loop.last %][% END %]]; </script> [% 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 %] [% value.join(', ') FILTER html %] [% END %] [% END %] [% IF bug && field.name == 'component' %] (<a href="buglist.cgi?component=[% bug.component FILTER uri %]&product=[% bug.product FILTER uri %]&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 %]