Commit b4aecfef authored by rojanu's avatar rojanu Committed by Byron Jones

Bug 539894: Use <optgroup/> to group products into classifications in the…

Bug 539894: Use <optgroup/> to group products into classifications in the product drop-down on show_bug.cgi r=glob, a=justdave
parent b6027058
......@@ -59,13 +59,7 @@ if (! defined($product_id)) {
push(@datasets, $datasets);
}
# Start our product list with an entry for all products, then add those
# products that the user has permissions for.
my @myproducts = ($product_all);
push( @myproducts, @{$user->get_selectable_products} );
$vars->{'datasets'} = \@datasets;
$vars->{'products'} = \@myproducts;
print $cgi->header();
}
......
......@@ -88,12 +88,13 @@
<tr>
<th class="top left">
Product/Component:<br>
<select name="product" onchange="selectProduct(this, this.form.component, null, null, '__Any__');">
<option value="">__Any__</option>
[% FOREACH prod = products %]
<option value="[% prod.name FILTER html %]">[% prod.name FILTER html %]</option>
[% END %]
</select><br>
[% INCLUDE "global/product-select.html.tmpl"
id => "product"
name => "product"
add => "__Any__"
onchange => "selectProduct(this, this.form.component, null, null, '__Any__');"
products => products
%]<br>
<select name="component">
<option value="">__Any__</option>
[% FOREACH comp = components %]
......
......@@ -39,15 +39,13 @@
<form id="flagtype_form" name="flagtype_form" action="editflagtypes.cgi" method="get">
<div class="inline">
<label for="product">Product:</label>
<select id="product" name="product"
onchange="selectProduct(this, this.form.component, null, null, '__Any__');">
<option value="">__Any__</option>
[% FOREACH prod = products %]
<option value="[% prod.name FILTER html %]"
[%+ 'selected="selected"' IF selected_product == prod.name %]>
[%- prod.name FILTER html %]</option>
[% END %]
</select>
[% INCLUDE "global/product-select.html.tmpl"
id => "product"
name => "product"
add => "__Any__"
onchange => "selectProduct(this, this.form.component, null, null, '__Any__');"
products => products
%]
</div>
<div class="inline">
......
......@@ -241,11 +241,20 @@
[%# PRODUCT #%]
[%#############%]
<tr>
[% INCLUDE bug/field.html.tmpl
bug = bug, field = bug_fields.product,
override_legal_values = bug.choices.product
desc_url = 'describecomponents.cgi', value = bug.product
editable = bug.check_can_change_field('product', 0, 1) %]
[% PROCESS "bug/field-label.html.tmpl"
field = bug_fields.product
desc_url = 'describecomponents.cgi'
value = bug.product
%]
<td class="field_value" id="field_container_product">
[% INCLUDE "global/product-select.html.tmpl"
id => "product"
name => "product"
value => bug.product
products => bug.choices.product
isselect => bug.check_can_change_field('product', 0, 1)
%]
</td>
</tr>
[%# Classification is here so that it can be used in value controllers
......
[%# 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:
# name: mandatory; field name
# id: optional; field id
# value: optional; default field value/selection
# classes: optional; an array of classes to be added
# onchange: optional; onchange attribute value
# disabled: optional; if true, the field is disabled
# accesskey: optional; accesskey attribute value
# add: optional; prepend menu option for value specified to start of select
# dontchange: optional; prepend menu option for "dontchange" to start of select
# multiple: optional; do multiselect box, value is size (height) of box
# title: optional; extra information to display as a tooltip
# products: optional; an array of custom product names
# isselect: optional; whether the product list should be displayed as a <select>
# or as just the plain text of its value.
# valueattribute: optional; the product attribute to be used for <option value="">,
# defaults to product name
#%]
[% IF !isselect.defined %]
[% isselect = 1 %]
[% END %]
[% DEFAULT valueattribute = "name" %]
[% IF isselect %]
<select name="[% name FILTER html %]"
[% IF id %] id="[% id FILTER html %]" [% END %]
[% IF classes %] class="[% classes.join(' ') FILTER html %]" [% END %]
[% IF onchange %] onchange="[% onchange FILTER html %]" [% END %]
[% IF disabled %] disabled="[% disabled FILTER html %]" [% END %]
[% IF accesskey %] accesskey="[% accesskey FILTER html %]" [% END %]
[% IF multiple %] multiple="multiple" size="[% multiple FILTER html %]" [% END %]
[% IF title %] title="[% title FILTER html %]" [% END %]
>
[% IF add %]
<option value="">[% add FILTER html %]</option>
[% END %]
[% IF dontchange %]
<option value="[% dontchange FILTER html %]">[% dontchange FILTER html %]</option>
[% END %]
[% IF Param('useclassification') %]
[% product_ids = {} %]
[% IF products %]
[% FOREACH p = products %]
[% key = p.id -%]
[% product_ids.$key = p.id -%]
[% END %]
[% END %]
[% FOREACH c = user.get_selectable_classifications %]
<optgroup label="[% c.name FILTER html %]">
[% FOREACH p = user.get_selectable_products(c.id) %]
[% NEXT IF (products && ! product_ids.exists(p.id)) %]
<option value="[% p.$valueattribute FILTER html %]"
[% " selected" IF (cgi.param(name) == p.name) || (value == p.name) %]>
[% p.name FILTER html %]
</option>
[% END %]
</optgroup>
[% END %]
[% ELSE %]
[% products = user.get_selectable_products UNLESS products %]
[% FOREACH p = products %]
<option value="[% p.$valueattribute FILTER html %]"
[% " selected" IF (cgi.param(name) == p.name) || (value == p.name) %]>
[% p.name FILTER html %]
</option>
[% END %]
[% END %]
</select>
[% ELSE %]
[% value.join(', ') FILTER html %]
[% END %]
......@@ -49,9 +49,11 @@
<th><label for="product">Product:</label></th>
<td>
[% PROCESS selectmenu menuname = "product"
menuitems = products
property = "name" %]
[% INCLUDE "global/product-select.html.tmpl"
id => "product"
name => "product"
dontchange => dontchange
%]
</td>
<th><label for="version">Version:</label></th>
......
......@@ -51,13 +51,11 @@
<tr>
<td>Restrict to products:</td>
<td>
<select name="product" size="5" multiple="multiple">
[% FOREACH p = user.get_selectable_products %]
<option name="[% p.name FILTER html %]"
[% ' selected="selected"' IF product.contains(p.name) %]
>[% p.name FILTER html %]</option>
[% END %]
</select>
[% INCLUDE "global/product-select.html.tmpl"
id => "product"
name => "product"
multiple => 5
%]
</td>
</tr>
......
......@@ -7,7 +7,6 @@
#%]
[%# INTERFACE:
# products: an array of product names the user is allowed to view.
# datasets: an array of hashes with available statuses and resolutions.
# url_image: URL of the generated graph.
#%]
......@@ -29,11 +28,12 @@
<tr>
<th>Product:</th>
<td>
<select id="product_id" name="product_id">
[% FOREACH product = products %]
<option value="[% product.id FILTER html %]">[% product.name || '-All-' FILTER html %]</option>
[% END %]
</select>
[% INCLUDE "global/product-select.html.tmpl"
id => "product_id"
name => "product_id"
valueattribute => "id"
add => "-All-"
%]
</td>
</tr>
<tr>
......
......@@ -67,28 +67,12 @@ to some group are shown by default.
</td>
<th>Product:</th>
<td>
<select name="product" onchange="selectProduct(this, this.form.component, null, null, 'Any');">
<option value="">Any</option>
[% IF Param('useclassification') %]
[% FOREACH c = user.get_selectable_classifications %]
<optgroup label="[% c.name FILTER html %]">
[% FOREACH p = user.get_selectable_products(c.id) %]
<option value="[% p.name FILTER html %]"
[% " selected" IF cgi.param('product') == p.name %]>
[% p.name FILTER html %]
</option>
[% END %]
</optgroup>
[% END %]
[% ELSE %]
[% FOREACH p = user.get_selectable_products %]
<option value="[% p.name FILTER html %]"
[% " selected" IF cgi.param('product') == p.name %]>
[% p.name FILTER html %]
</option>
[% END %]
[% END %]
</select>
[% INCLUDE "global/product-select.html.tmpl"
id => "product"
name => "product"
add => "Any"
onchange => "selectProduct(this, this.form.component, null, null, 'Any');"
%]
</td>
<th>Flag:</th>
<td>
......
......@@ -60,30 +60,11 @@ for "crash secure SSL flash".
<label for="product">[% field_descs.product FILTER html %]:</label>
</th>
<td>
<select name="product" id="product">
<option value="">All</option>
[% IF Param('useclassification') %]
[% FOREACH c = classification %]
<optgroup label="[% c.name FILTER html %]">
[% FOREACH p = user.get_selectable_products(c.id) %]
[% IF p.components.size %]
<option value="[% p.name FILTER html %]"
[% " selected" IF default.product.contains(p.name) %]>
[% p.name FILTER html %]
</option>
[% END %]
[% END %]
</optgroup>
[% END %]
[% ELSE %]
[% FOREACH p = product %]
<option value="[% p.name FILTER html %]"
[% " selected" IF default.product.contains(p.name) %]>
[% p.name FILTER html %]
</option>
[% END %]
[% END %]
</select>
[% INCLUDE "global/product-select.html.tmpl"
id => "product"
name => "product"
add => "All"
%]
</td>
</tr>
<tr>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment