blob: 5d7f78d93aae36987417cc474e612d4e0539fdbe [file] [log] [blame]
[%# 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>
#%]
<script type="text/javascript">
<!--
// Enables or disables a requestee field depending on whether or not
// the user is requesting the corresponding flag.
function toggleRequesteeField(flagField, no_focus)
{
// Convert the ID of the flag field into the ID of its corresponding
// requestee field and then use the ID to get the field.
var id = flagField.name.replace(/flag(_type)?-(\d+)/, "requestee$1-$2");
var requesteeField = document.getElementById(id);
if (!requesteeField) return;
// Enable or disable the requestee field based on the value
// of the flag field.
if (flagField.value == "?") {
requesteeField.disabled = false;
if (!no_focus) requesteeField.focus();
} else
requesteeField.disabled = true;
}
// Disables requestee fields when the window is loaded since they shouldn't
// be enabled until the user requests that flag type.
function disableRequesteeFields()
{
var inputElements = document.getElementsByTagName("input");
var selectElements = document.getElementsByTagName("select");
//You cannot update Node lists, so you must create an array to combine the NodeLists
var allElements = [];
for( var i=0; i < inputElements.length; i++ ) {
allElements[allElements.length] = inputElements.item(i);
}
for( var i=0; i < selectElements.length; i++ ) { //Combine inputs with selects
allElements[allElements.length] = selectElements.item(i);
}
var inputElement, id, flagField;
for ( var i=0 ; i<allElements.length ; i++ )
{
inputElement = allElements[i];
if (inputElement.name.search(/^requestee(_type)?-(\d+)$/) != -1)
{
// Convert the ID of the requestee field into the ID of its corresponding
// flag field and then use the ID to get the field.
id = inputElement.name.replace(/requestee(_type)?-(\d+)/, "flag$1-$2");
flagField = document.getElementById(id);
if (flagField && flagField.value != "?")
inputElement.disabled = true;
}
}
}
window.onload = disableRequesteeFields;
// -->
</script>
[%# We list flags by looping twice over the flag types relevant for the bug.
# In the first loop, we display existing flags and then, for active types,
# we display UI for adding new flags. In the second loop, we display UI
# for adding additional new flags for those types for which a flag already
# exists but which are multiplicable (can have multiple flags of the type
# on a single bug/attachment).
#%]
[% DEFAULT flag_table_id = "flags" %]
<table id="[% flag_table_id FILTER html %]">
[% UNLESS flag_no_header %]
<tr>
<th colspan="3">
Flags:
</th>
[% IF any_flags_requesteeble %]
<th>
Requestee:
</th>
[% END %]
</tr>
[% END %]
[%# Step 1: Display every flag type (except inactive types with no flags). %]
[% FOREACH type = flag_types %]
[%# Step 1a: Display existing flag(s). %]
[% FOREACH flag = type.flags %]
<tr>
<td>
[% flag.setter.nick FILTER html %]:
</td>
<td>
<label title="[% type.description FILTER html %]"
for="flag-[% flag.id %]">
[%- type.name FILTER html FILTER no_break -%]</label>
</td>
<td>
<select id="flag-[% flag.id %]" name="flag-[% flag.id %]"
title="[% type.description FILTER html %]"
onchange="toggleRequesteeField(this);"
class="flag_select">
[%# Only display statuses the user is allowed to set. %]
[% IF user.can_request_flag(type) %]
<option value="X"></option>
[% END %]
[% IF type.is_active %]
[% IF (type.is_requestable && user.can_request_flag(type)) || flag.status == "?" %]
<option value="?" [% "selected" IF flag.status == "?" %]>?</option>
[% END %]
[% IF user.can_set_flag(type) || flag.status == "+" %]
<option value="+" [% "selected" IF flag.status == "+" %]>+</option>
[% END %]
[% IF user.can_set_flag(type) || flag.status == "-" %]
<option value="-" [% "selected" IF flag.status == "-" %]>-</option>
[% END %]
[% ELSE %]
<option value="[% flag.status %]" selected="selected">[% flag.status %]</option>
[% END %]
</select>
</td>
[% IF any_flags_requesteeble %]
<td>
[% IF (type.is_active && type.is_requestable && type.is_requesteeble) || flag.requestee %]
<span style="white-space: nowrap;">
[% IF Param('usemenuforusers') %]
[% flag_custom_list = flag.type.grant_list %]
[% IF !(type.is_active && type.is_requestable && type.is_requesteeble) %]
[%# We are here only because there was already a requestee. In this case,
the only valid action is to remove the requestee or leave it alone;
nothing else. %]
[% flag_custom_list = [flag.requestee] %]
[% END %]
[% INCLUDE global/userselect.html.tmpl
name => "requestee-$flag.id"
id => "requestee-$flag.id"
value => flag.requestee.login
multiple => 0
emptyok => 1
custom_userlist => flag_custom_list
%]
[% ELSE %]
(<input type="text" size="30" maxlength="255"
id="requestee-[% flag.id %]"
name="requestee-[% flag.id %]"
[% IF flag.status == "?" && flag.requestee %]
value="[% flag.requestee.login FILTER html %]"
[% END %]>)
[% END %]
</span>
[% END %]
</td>
[% END %]
</tr>
[% END %]
[%# Step 1b: Display UI for setting flag. %]
[% IF (!type.flags || type.flags.size == 0) && type.is_active %]
<tr>
<td>&nbsp;</td>
<td>
<label title="[% type.description FILTER html %]"
for="flag_type-[% type.id %]">
[%- type.name FILTER html FILTER no_break %]</label>
</td>
<td>
<select id="flag_type-[% type.id %]" name="flag_type-[% type.id %]"
title="[% type.description FILTER html %]"
[% " disabled=\"disabled\"" UNLESS (type.is_requestable && user.can_request_flag(type)) || user.can_set_flag(type) %]
onchange="toggleRequesteeField(this);"
class="flag_select">
<option value="X"></option>
[% IF type.is_requestable && user.can_request_flag(type) %]
<option value="?">?</option>
[% END %]
[% IF user.can_set_flag(type) %]
<option value="+">+</option>
<option value="-">-</option>
[% END %]
</select>
</td>
[% IF any_flags_requesteeble %]
<td>
[% IF type.is_requestable && type.is_requesteeble %]
<span style="white-space: nowrap;">
[% IF Param('usemenuforusers') %]
[% INCLUDE global/userselect.html.tmpl
name => "requestee_type-$type.id"
id => "requestee_type-$type.id"
multiple => type.is_multiplicable * 3
emptyok => !type.is_multiplicable
value => ""
custom_userlist => type.grant_list
%]
[% ELSE %]
(<input type="text" size="30" maxlength="255"
id="requestee_type-[% type.id %]"
name="requestee_type-[% type.id %]">)
[% END %]
</span>
[% END %]
</td>
[% END %]
</tr>
[% END %]
[% END %]
[%# Step 2: Display flag type again (if type is multiplicable). %]
[% FOREACH type = flag_types %]
[% NEXT UNLESS type.flags && type.flags.size > 0 && type.is_multiplicable && type.is_active %]
[% IF !separator_displayed %]
<tr><td colspan="3"><hr></td></tr>
[% separator_displayed = 1 %]
[% END %]
<tr>
<td colspan="2">
addl. <label title="[% type.description FILTER html %]"
for="flag_type-[% type.id %]">
[%- type.name FILTER html FILTER no_break %]</label>
</td>
<td>
<select id="flag_type-[% type.id %]" name="flag_type-[% type.id %]"
title="[% type.description FILTER html %]"
[% " disabled=\"disabled\"" UNLESS (type.is_requestable && user.can_request_flag(type)) || user.can_set_flag(type) %]
onchange="toggleRequesteeField(this);"
class="flag_select">
<option value="X"></option>
[% IF type.is_requestable && user.can_request_flag(type) %]
<option value="?">?</option>
[% END %]
[% IF user.can_set_flag(type) %]
<option value="+">+</option>
<option value="-">-</option>
[% END %]
</select>
</td>
[% IF any_flags_requesteeble %]
<td>
[% IF type.is_requestable && type.is_requesteeble %]
<span style="white-space: nowrap;">
[% IF Param('usemenuforusers') %]
[% INCLUDE global/userselect.html.tmpl
name => "requestee_type-$type.id"
id => "requestee_type-$type.id"
multiple => type.is_multiplicable * 3
emptyok => !type.is_multiplicable
value => ""
custom_userlist => type.grant_list
%]
[% ELSE %]
(<input type="text" size="30" maxlength="255"
id="requestee_type-[% type.id %]"
name="requestee_type-[% type.id %]">)
[% END %]
</span>
[% END %]
</td>
[% END %]
</tr>
[% END %]
</table>