diff options
author | rojanu <aliustek@gmail.com> | 2014-04-02 16:35:08 +0800 |
---|---|---|
committer | Byron Jones <glob@mozilla.com> | 2014-04-02 16:35:08 +0800 |
commit | b4aecfefc218d425c7c2b05d0878d4b062613a18 (patch) | |
tree | 436a2784b28faaecd14f1f9db26fb63821ffb9b6 | |
parent | b6027058e4a8e06ffc252645e5e8b695b0aa2802 (diff) | |
download | bugs-b4aecfefc218d425c7c2b05d0878d4b062613a18.tar bugs-b4aecfefc218d425c7c2b05d0878d4b062613a18.tar.gz bugs-b4aecfefc218d425c7c2b05d0878d4b062613a18.tar.bz2 bugs-b4aecfefc218d425c7c2b05d0878d4b062613a18.tar.xz bugs-b4aecfefc218d425c7c2b05d0878d4b062613a18.zip |
Bug 539894: Use <optgroup/> to group products into classifications in the product drop-down on show_bug.cgi
r=glob, a=justdave
-rwxr-xr-x | reports.cgi | 6 | ||||
-rw-r--r-- | template/en/default/admin/flag-type/edit.html.tmpl | 13 | ||||
-rw-r--r-- | template/en/default/admin/flag-type/list.html.tmpl | 16 | ||||
-rw-r--r-- | template/en/default/bug/edit.html.tmpl | 19 | ||||
-rw-r--r-- | template/en/default/global/product-select.html.tmpl | 80 | ||||
-rw-r--r-- | template/en/default/list/edit-multiple.html.tmpl | 8 | ||||
-rw-r--r-- | template/en/default/reports/duplicates.html.tmpl | 12 | ||||
-rw-r--r-- | template/en/default/reports/old-charts.html.tmpl | 12 | ||||
-rw-r--r-- | template/en/default/request/queue.html.tmpl | 28 | ||||
-rw-r--r-- | template/en/default/search/search-specific.html.tmpl | 29 |
10 files changed, 135 insertions, 88 deletions
diff --git a/reports.cgi b/reports.cgi index 618feb8c8..1f1791e42 100755 --- a/reports.cgi +++ b/reports.cgi @@ -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(); } diff --git a/template/en/default/admin/flag-type/edit.html.tmpl b/template/en/default/admin/flag-type/edit.html.tmpl index 4ee4a999c..5f45b6b76 100644 --- a/template/en/default/admin/flag-type/edit.html.tmpl +++ b/template/en/default/admin/flag-type/edit.html.tmpl @@ -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 %] diff --git a/template/en/default/admin/flag-type/list.html.tmpl b/template/en/default/admin/flag-type/list.html.tmpl index 3783cade8..25b2e3390 100644 --- a/template/en/default/admin/flag-type/list.html.tmpl +++ b/template/en/default/admin/flag-type/list.html.tmpl @@ -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"> diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl index 61fa2c1ec..ae33146a7 100644 --- a/template/en/default/bug/edit.html.tmpl +++ b/template/en/default/bug/edit.html.tmpl @@ -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 diff --git a/template/en/default/global/product-select.html.tmpl b/template/en/default/global/product-select.html.tmpl new file mode 100644 index 000000000..8e43c9d0e --- /dev/null +++ b/template/en/default/global/product-select.html.tmpl @@ -0,0 +1,80 @@ +[%# 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 %] diff --git a/template/en/default/list/edit-multiple.html.tmpl b/template/en/default/list/edit-multiple.html.tmpl index 2282d69f4..5adc47a59 100644 --- a/template/en/default/list/edit-multiple.html.tmpl +++ b/template/en/default/list/edit-multiple.html.tmpl @@ -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> diff --git a/template/en/default/reports/duplicates.html.tmpl b/template/en/default/reports/duplicates.html.tmpl index 67d1f233e..0d47aae75 100644 --- a/template/en/default/reports/duplicates.html.tmpl +++ b/template/en/default/reports/duplicates.html.tmpl @@ -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> diff --git a/template/en/default/reports/old-charts.html.tmpl b/template/en/default/reports/old-charts.html.tmpl index b3ebe386d..acebca74d 100644 --- a/template/en/default/reports/old-charts.html.tmpl +++ b/template/en/default/reports/old-charts.html.tmpl @@ -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> diff --git a/template/en/default/request/queue.html.tmpl b/template/en/default/request/queue.html.tmpl index 07dec7315..b2b76ba0b 100644 --- a/template/en/default/request/queue.html.tmpl +++ b/template/en/default/request/queue.html.tmpl @@ -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> diff --git a/template/en/default/search/search-specific.html.tmpl b/template/en/default/search/search-specific.html.tmpl index 4d1b4c7ef..e5d59abfb 100644 --- a/template/en/default/search/search-specific.html.tmpl +++ b/template/en/default/search/search-specific.html.tmpl @@ -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> |