diff options
author | Dave Lawrence <dlawrence@mozilla.com> | 2012-08-07 20:32:38 +0200 |
---|---|---|
committer | Dave Lawrence <dlawrence@mozilla.com> | 2012-08-07 20:32:38 +0200 |
commit | cb14de16717a12c32632d15a95e34b36edb7d178 (patch) | |
tree | cbd0300bc3cb30c483e9d73ab9d8b1c0c99ca7b7 /extensions/ProductDashboard/template/en/default/pages | |
parent | b037f9bf0993f519375f6dfa0c514529d48b7f23 (diff) | |
download | bugzilla-cb14de16717a12c32632d15a95e34b36edb7d178.tar.gz bugzilla-cb14de16717a12c32632d15a95e34b36edb7d178.tar.xz |
Initial checkin of Product Dashboard
Diffstat (limited to 'extensions/ProductDashboard/template/en/default/pages')
7 files changed, 1005 insertions, 0 deletions
diff --git a/extensions/ProductDashboard/template/en/default/pages/productdashboard.html.tmpl b/extensions/ProductDashboard/template/en/default/pages/productdashboard.html.tmpl new file mode 100644 index 000000000..a319060d1 --- /dev/null +++ b/extensions/ProductDashboard/template/en/default/pages/productdashboard.html.tmpl @@ -0,0 +1,209 @@ +[%# 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. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% filtered_product = product.name FILTER html %] +[% PROCESS global/header.html.tmpl + title = "Product Dashboard: $filtered_product" + style_urls = [ "skins/standard/buglist.css", + "js/yui/assets/skins/sam/paginator.css", + "extensions/ProductDashboard/web/styles/productdashboard.css" ] + yui = [ "datatable", "paginator", "calendar" ] + javascript_urls = [ "js/util.js", "js/field.js", + "extensions/ProductDashboard/web/js/productdashboard.js" ] +%] + +<script type="text/javascript"> +<!-- + [%# Set up severities list for proper sorting %] + var severities = new Array(); + [% sort_count = 0 %] + [% FOREACH s = severities %] + severities['[% s FILTER js %]'] = [% sort_count FILTER js %]; + [% sort_count = sort_count + 1 %] + [% END %] +--> +</script> + +[% url_filtered_product = product.name FILTER uri %] +[% url_filtered_status = bug_status FILTER uri %] + +[% tabs = [ + { + name => "summary", + label => "Summary", + link => "page.cgi?id=productdashboard.html&product=$url_filtered_product&bug_status=$url_filtered_status&tab=summary" + }, + { + name => "recents", + label => "Recents", + link => "page.cgi?id=productdashboard.html&product=$url_filtered_product&bug_status=$url_filtered_status&tab=recents" + }, + { + name => "components", + label => "Components/Versions", + link => "page.cgi?id=productdashboard.html&product=$url_filtered_product&bug_status=$url_filtered_status&tab=components" + }, + { + name => "duplicates", + label => "Duplicates", + link => "page.cgi?id=productdashboard.html&product=$url_filtered_product&bug_status=$url_filtered_status&tab=duplicates" + }, + { + name => "popularity", + label => "Popularity", + link => "page.cgi?id=productdashboard.html&product=$url_filtered_product&bug_status=$url_filtered_status&tab=popularity" + }, + { + name => "roadmap", + label => "Road Map", + link => "page.cgi?id=productdashboard.html&product=$url_filtered_product&bug_status=$url_filtered_status&tab=roadmap" + }, + ] +%] + +[% FOREACH tab IN tabs %] + [% IF tab.name == current_tab_name %] + [% current_tab = tab %] + [% LAST %] + [% END %] +[% END %] + +[% full_bug_count = 0 %] +[% IF bug_status == 'open' %] + [% full_bug_count = total_open_bugs %] +[% ELSIF bug_status == 'closed' %] + [% full_bug_count = total_closed_bugs %] +[% ELSE %] + [% full_bug_count = total_bugs %] +[% END %] + +[% bug_link = bug_link_all %] +[% IF bug_status == 'open' %] + [% bug_link = bug_link_open %] +[% ELSIF bug_status == 'closed' %] + [% bug_link = bug_link_closed %] +[% END %] + +<div class="yui-skin-sam"> + <a name="top"></a> + + <form action="page.cgi" method="get"> + <input type="hidden" name="id" value="productdashboard.html"> + <input type="hidden" name="tab" value="[% current_tab.name FILTER html %]"> + + [% IF summary.keys %] + <input type="hidden" name="[% summary.type FILTER html %]" value="[% summary.value FILTER html %]"> + [% END %] + + [% IF product %] + <span id="product_dashboard_links"> + <ul> + <li><a href="[% urlbase FILTER none %]enter_bug.cgi?product=[% product.name FILTER uri %]"> + Create a new [% terms.bug %] in this product</a></li> + <li><a href="[% urlbase FILTER none %]describecomponents.cgi?product=[% product.name FILTER uri %]"> + Show full component descriptions for this product</a></li> + </ul> + </span> + [% END %] + + <h3>Product: [% product.name FILTER html %]</h3> + <select name="product"> + [% FOREACH c = classifications %] + <optgroup label="[% c.name FILTER html %]"> + [% FOREACH p = c.products %] + <option value="[% p.name FILTER html %]" + [% IF p.name == product.name %]selected="selected"[% END %]> + [% p.name FILTER html %]</option> + [% END %]</optgroup> + [% END %] + </select> + <select name="bug_status" id="bug_status"> + [% statuses = [ { name = 'open', label = "Open $terms.Bugs" }, + { name = 'closed', label = "Closed $terms.Bugs" }, + { name = 'all', label = "All $terms.Bugs" } ] %] + [% FOREACH status = statuses %] + <option value="[% status.name FILTER html %]" + [% " selected" IF bug_status == "${status.name}" %]> + [% status.label FILTER html %] + </option> + [% END %] + </select> + + <input type="submit" value="[% IF product %]Change[% ELSE %]Submit[% END %]"> + + [% IF product %] + + <p><i>[% product.description FILTER none %]</i></p> + + [% WRAPPER global/tabs.html.tmpl + tabs = tabs + current_tab = current_tab + %] + + <h3>[% current_tab.label FILTER html %]</h3> + + [% IF current_tab.name == 'summary' %] + [% PROCESS pages/productdashboard/summary.html.tmpl %] + [% END %] + + [% IF current_tab.name == 'recents' %] + [% PROCESS pages/productdashboard/recents.html.tmpl %] + [% END %] + + [% IF current_tab.name == 'components' %] + [% PROCESS pages/productdashboard/components.html.tmpl %] + [% END %] + + [% IF current_tab.name == 'duplicates' %] + [% PROCESS pages/productdashboard/duplicates.html.tmpl %] + [% END %] + + [% IF current_tab.name == 'popularity' %] + [% PROCESS pages/productdashboard/popularity.html.tmpl %] + [% END %] + + [% IF current_tab.name == 'roadmap' && Param('usetargetmilestone') %] + [% PROCESS pages/productdashboard/roadmap.html.tmpl %] + [% END %] + + [% END %][%# END WRAPPER %] + [% END %] + + </form> +</div> + +[% PROCESS global/footer.html.tmpl %] + +[% BLOCK bar_graph %] + [% IF full_bug_count > 0 %][%# No divide by zero %] + [% percentage_bugs = (count / full_bug_count) * 100 FILTER format('%02.2f') %] + [% ELSE %] + [% percentage_bugs = 0 %] + [% END %] + <div class="bar_graph"> + <table cellpadding="0" cellspacing="0" width="300px"> + <tr> + <td width="[% percentage_bugs FILTER html %]%"> + <table cellpadding="0" cellspacing="0" width="100%"> + <tr> + <td bgcolor="#3c78b5"> + <a title="[% percentage_bugs FILTER html %]%"> + <img src="extensions/ProductDashboard/web/images/spacer.gif" height=10 width="100%" title="[% percentage_bugs FILTER html %]%"> + </a> + </td> + </tr> + </table> + </td> + <td width="[% 100 - percentage_bugs FILTER html %]%"> [% percentage_bugs FILTER html %]%</td> + </tr> + </table> + </div> +[% END %] + diff --git a/extensions/ProductDashboard/template/en/default/pages/productdashboard/components.html.tmpl b/extensions/ProductDashboard/template/en/default/pages/productdashboard/components.html.tmpl new file mode 100644 index 000000000..7f5a05568 --- /dev/null +++ b/extensions/ProductDashboard/template/en/default/pages/productdashboard/components.html.tmpl @@ -0,0 +1,259 @@ +[%# 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. + #%] + +[% IF summary.keys %] + + <h3>Summary for [% summary.type FILTER html %]: [% summary.value FILTER html %]</h3> + + <style> + .yui-skin-sam .yui-dt table {width:100%;} + </style> + + <script type="text/javascript"> + <!-- + var column_defs = [ + { key:"id", label:"ID", sortable:true, sortOptions:{ sortFunction:sortBugIdLinks } }, + { key:"bug_status", label:"Status", sortable:true }, + { key:"version", label:"Version", sortable:true }, + { key:"component", label:"Component", sortable:true }, + { key:"bug_severity", label:"Severity", sortable:true, sortOptions:{ sortFunction:sortBugSeverity } }, + { key:"Summary", label:"Summary", sortable:false }, + ]; + var fields = [ + { key:"id" }, + { key:"bug_status" }, + { key:"version" }, + { key:"component" }, + { key:"bug_severity" }, + { key:"Summary" } + ]; + [% IF user.is_timetracker %] + addStatListener("past_due", "past_due_table", column_defs, fields, { + [% IF summary.past_due.size > 25 %] paginator: new YAHOO.widget.Paginator({ rowsPerPage: 25 }) [% END %] + }); + [% END %] + addStatListener("updated_recently", "updated_recently_table", column_defs, fields, { + [% IF summary.updated_recently.size > 25 %] paginator: new YAHOO.widget.Paginator({ rowsPerPage: 25 }) [% END %] + }); + --> + </script> + + [% IF user.is_timetracker %] + <p> + <a href="#past_due">Past Due</a> | + <a href="#updated_recently">Updated Recently</a> + </p> + [% END %] + + <div class="yui-skin-sam"> + + [% IF user.is_timetracker %] + <a name="past_due"></a> + <b>[% summary.past_due.size FILTER html %] Past Due [% terms.Bugs %]</b> (deadline is before today's date) + (<a href="[% bug_link FILTER html %]&[% summary.type FILTER uri %]=[% summary.value FILTER uri %]&field0-0-0=deadline&type0-0-0=lessthan&value0-0-0=[% summary.timestamp FILTER uri %]&order=deadline">full list</a>) + <div id="past_due"> + <table id="past_due_table" cellspacing="3" cellpadding="0" border="0" width="100%"> + <thead> + <tr bgcolor="#CCCCCC"> + [% FOREACH column = [ "ID", "Status", "Version", "Component", "Severity" "Summary" ] %] + <th>[% column FILTER html %]</th> + [% END %] + </tr> + </thead> + <tbody> + [% FOREACH bug = summary.past_due %] + [% count = loop.count() %] + <tr class="[%+ count % 2 == 1 ? "bz_row_odd" : "bz_row_even" -%]"> + <td align="center"><a href="[% urlbase FILTER none %]show_bug.cgi?id=[% bug.id FILTER uri %]"> + [% bug.id FILTER html %]</a></td> + <td align="center">[% bug.status FILTER html %]</td> + <td align="center">[% bug.version FILTER html %]</td> + <td align="center">[% bug.component FILTER html %]</td> + <td align="center">[% bug.severity FILTER html %]</td> + <td>[% bug.summary FILTER html %]</td> + </tr> + [% END %] + </tbody> + </table> + </div> + <br> + [% END %] + + <a name="updated_recently"></a> + <b>[% summary.updated_recently.size FILTER html %] Most Recently Updated [% terms.Bugs %]</b> + [% IF user.is_timetracker %](<a href="#top">back to top</a>)[% END %] + (<a href="[% bug_link FILTER html %]&[% summary.type FILTER uri %]=[% summary.value FILTER uri %]&order=changeddate DESC">full list</a>) + <div id="updated_recently"> + <table id="updated_recently_table" cellspacing="3" cellpadding="0" border="0" width="100%"> + <thead> + <tr bgcolor="#CCCCCC"> + [% FOREACH column = [ "ID", "Status", "Version", "Component", "Severity" "Summary" ] %] + <th>[% column FILTER html %]</th> + [% END %] + </tr> + </thead> + <tbody> + [% FOREACH bug = summary.updated_recently %] + [% count = loop.count() %] + <tr class="[%+ count % 2 == 1 ? "bz_row_odd" : "bz_row_even" -%]"> + <td align="center"><a href="[% urlbase FILTER none %]show_bug.cgi?id=[% bug.id FILTER uri %]"> + [% bug.id FILTER html %]</a></td> + <td align="center">[% bug.status FILTER html %]</td> + <td align="center">[% bug.version FILTER html %]</td> + <td align="center">[% bug.component FILTER html %]</td> + <td align="center">[% bug.severity FILTER html %]</td> + <td>[% bug.summary FILTER html %]</td> + </tr> + [% END %] + </tbody> + </table> + </div> + </div> + +[% ELSE %] + + [% summary_url = "page.cgi?id=productdashboard.html&product=$url_filtered_product&bug_status=$url_filtered_status&tab=components" %] + + <script type="text/javascript"> + <!-- + var column_defs = [ + { key:"name", label:"Name", sortable:true }, + { key:"count", label:"Count", sortable:true }, + { key:"percentage", label:"Percentage", sortable:false }, + { key:"bug_list", label:"[% terms.Bug %] List", sortable:false } + ]; + var fields = [ + { key:"name" }, + { key:"count", parser:"number" }, + { key:"percentage" }, + { key:"bug_list" } + ]; + addStatListener("component_counts", "component_counts_table", column_defs, fields, {}); + addStatListener("version_counts", "version_counts_table", column_defs, fields, {}); + addStatListener("milestone_counts", "milestone_counts_table", column_defs, fields, {}); + --> + </script> + + <p> + <a href="#component">Component</a> | + <a href="#version">Version</a> | + <a href="#milestone">Milestone</a> + </p> + + <p>Click on value to show additional information</p> + + <div class="yui-skin-sam"> + <a name="component"></a> + <b>Component</b> + <div id="component_counts"> + <table id="component_counts_table" border="0" cellspacing="3" cellpadding="0"> + <thead> + <tr> + <th>Name</th> + <th>Count</th> + <th>Percentage</th> + <th>[% terms.Bug %] List</th> + </tr> + </thead> + <tbody> + [% FOREACH col = by_component %] + <tr> + <td> + <a href="[% summary_url FILTER none %]&component=[% col.0 FILTER uri %]"> + [% col.0 FILTER html %]</a> + </td> + <td align="right"> + [% col.1 FILTER html %] + </td> + <td width="70%"> + [% INCLUDE bar_graph count = col.1 %] + </td> + <td> + <a href="[% bug_link FILTER html %]&component=[% col.0 FILTER uri %]">View</a> + </td> + </tr> + [% END %] + </tbody> + </table> + </div> + <br> + <a name="version"></a> + <b>Version</b> + (<a href="#top">back to top</a>) + <div id="version_counts"> + <table id="version_counts_table" border="0" cellspacing="3" cellpadding="0"> + <thead> + <tr> + <th>Name</th> + <th>Count</th> + <th>Percentage</th> + <th>[% terms.Bug %] List</th> + </tr> + </thead> + <tbody> + [% FOREACH col = by_version %] + <tr> + <td> + <a href="[% summary_url FILTER none %]&version=[% col.0 FILTER uri %]"> + [% col.0 FILTER html %]</a> + </td> + <td align="right"> + [% col.1 FILTER html %] + </td> + <td width="70%"> + [% INCLUDE bar_graph count = col.1 %] + </td> + <td> + <a href="[% bug_link FILTER html %]&version=[% col.0 FILTER uri %]">View</a> + </td> + </tr> + [% END %] + </tbody> + </table> + </div> + + [% IF Param('usetargetmilestone') %] + <br> + <a name="milestone"></a> + <b>Milestone</b> + (<a href="#top">back to top</a>) + <div id="milestone_counts"> + <table id="milestone_counts_table" border="0" cellspacing="3" cellpadding="0"> + <thead> + <tr> + <th>Name</th> + <th>Count</th> + <th>Percentage</th> + <th>[% terms.Bug %] List</th> + </tr> + </thead> + <tbody> + [% FOREACH col = by_milestone %] + <tr> + <td> + <a href="[% summary_url FILTER none %]&target_milestone=[% col.0 FILTER uri %]"> + [% col.0 FILTER html %]</a> + </td> + <td align="right"> + [% col.1 FILTER html %] + </td> + <td width="70%"> + [% INCLUDE bar_graph count = col.1 %] + </td> + <td> + <a href="[% bug_link FILTER html %]&target_milestone=[% col.0 FILTER uri %]">View</a> + </td> + </tr> + [% END %] + </tbody> + </table> + </div> + [% END %] + </div> + +[% END %] diff --git a/extensions/ProductDashboard/template/en/default/pages/productdashboard/duplicates.html.tmpl b/extensions/ProductDashboard/template/en/default/pages/productdashboard/duplicates.html.tmpl new file mode 100644 index 000000000..36a820300 --- /dev/null +++ b/extensions/ProductDashboard/template/en/default/pages/productdashboard/duplicates.html.tmpl @@ -0,0 +1,73 @@ +[%# 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. + #%] + +<style> + .yui-skin-sam .yui-dt table {width:100%;} +</style> + +<script type="text/javascript"> +<!-- +var column_defs = [ + { key:"id", label:"ID", sortable:true, sortOptions:{ sortFunction:sortBugIdLinks } }, + { key:"count", label:"Count", sortable:true }, + { key:"bug_status", label:"Status", sortable:true }, + { key:"version", label:"Version", sortable:true }, + { key:"component", label:"Component", sortable:true }, + { key:"bug_severity", label:"Severity", sortable:true, sortOptions:{ sortFunction:sortBugSeverity } }, + { key:"Summary", label:"Summary", sortable:false }, +]; +var fields = [ + { key:"id" }, + { key:"count", parser:"number" }, + { key:"bug_status" }, + { key:"version" }, + { key:"component" }, + { key:"bug_severity" }, + { key:"Summary" } +]; +addStatListener("duplicate_counts", "duplicate_counts_table", column_defs, fields, { + [% IF by_duplicate.size > 25 %] paginator: new YAHOO.widget.Paginator({ rowsPerPage: 25 }) [% END %] +}); +--> +</script> + +[% IF by_duplicate.size %] + <b>[% by_duplicate.size FILTER html %] [% terms.Bugs %] Found</b> + <div class="yui-skin-sam"> + <div id="duplicate_counts"> + <table id="duplicate_counts_table" cellspacing="3" cellpadding="0" border="0" width="100%"> + <thead> + <tr bgcolor="#CCCCCC"> + [% FOREACH column = [ "ID", "Dupe Count", "Status", "Version" + "Component", "Severity" "Summary" ] %] + + <th>[% column FILTER html %]</th> + [% END %] + </tr> + </thead> + <tbody> + [% FOREACH bug = by_duplicate %] + [% count = loop.count() %] + <tr class="[%+ count % 2 == 1 ? "bz_row_odd" : "bz_row_even" -%]"> + <td align="center"><a href="[% urlbase FILTER none %]show_bug.cgi?id=[% bug.id FILTER uri %]"> + [% bug.id FILTER html %]</a></td> + <td align="center">[% bug.dupe_count FILTER html %]</td> + <td align="center">[% bug.status FILTER html %]</td> + <td align="center">[% bug.version FILTER html %]</td> + <td align="center">[% bug.component FILTER html %]</td> + <td align="center">[% bug.severity FILTER html %]</td> + <td>[% bug.summary FILTER html %]</td> + </tr> + [% END %] + </tbody> + </table> + </div> + </div> +[% ELSE %] + <h3>No duplicate [% terms.bugs %] found.</h3> +[% END %] diff --git a/extensions/ProductDashboard/template/en/default/pages/productdashboard/popularity.html.tmpl b/extensions/ProductDashboard/template/en/default/pages/productdashboard/popularity.html.tmpl new file mode 100644 index 000000000..9c7c42563 --- /dev/null +++ b/extensions/ProductDashboard/template/en/default/pages/productdashboard/popularity.html.tmpl @@ -0,0 +1,73 @@ +[%# 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. + #%] + +<style> + .yui-skin-sam .yui-dt table {width:100%;} +</style> + +<script type="text/javascript"> +<!-- +var column_defs = [ + { key:"id", label:"ID", sortable:true, sortOptions:{ sortFunction:sortBugIdLinks } }, + { key:"count", label:"Count", sortable:true }, + { key:"bug_status", label:"Status", sortable:true }, + { key:"version", label:"Version", sortable:true }, + { key:"component", label:"Component", sortable:true }, + { key:"bug_severity", label:"Severity", sortable:true, sortOptions:{ sortFunction:sortBugSeverity } }, + { key:"Summary", label:"Summary", sortable:false }, +]; +var fields = [ + { key:"id" }, + { key:"count", parser:"number" }, + { key:"bug_status" }, + { key:"version" }, + { key:"component" }, + { key:"bug_severity" }, + { key:"Summary" } +]; +addStatListener("popularity_counts", "popularity_counts_table", column_defs, fields, { + [% IF by_popularity.size > 25 %] paginator: new YAHOO.widget.Paginator({ rowsPerPage: 25 }) [% END %] +}); +--> +</script> + +[% IF by_popularity.size %] + <b>[% by_popularity.size FILTER html %] [% terms.Bugs %] Found</b> + <div class="yui-skin-sam"> + <div id="popularity_counts"> + <table id="popularity_counts_table" cellspacing="3" cellpadding="0" border="0" width="100%"> + <thead> + <tr bgcolor="#CCCCCC"> + [% FOREACH column = [ "ID", "Count", "Status", "Version" + "Component", "Severity" "Summary" ] %] + + <th>[% column FILTER html %]</th> + [% END %] + </tr> + </thead> + <tbody> + [% FOREACH bug = by_popularity %] + [% count = loop.count() %] + <tr class="[%+ count % 2 == 1 ? "bz_row_odd" : "bz_row_even" -%]"> + <td align="center"><a href="[% urlbase FILTER none %]show_bug.cgi?id=[% bug.id FILTER uri %]"> + [% bug.id FILTER html %]</a></td> + <td align="center">[% bug.votes FILTER html %]</td> + <td align="center">[% bug.status FILTER html %]</td> + <td align="center">[% bug.version FILTER html %]</td> + <td align="center">[% bug.component FILTER html %]</td> + <td align="center">[% bug.severity FILTER html %]</td> + <td>[% bug.summary FILTER html %]</td> + </tr> + [% END %] + </tbody> + </table> + </div> + </div> +[% ELSE %] + <h3>No [% terms.bugs %] found.</h3> +[% END %] diff --git a/extensions/ProductDashboard/template/en/default/pages/productdashboard/recents.html.tmpl b/extensions/ProductDashboard/template/en/default/pages/productdashboard/recents.html.tmpl new file mode 100644 index 000000000..4350e7472 --- /dev/null +++ b/extensions/ProductDashboard/template/en/default/pages/productdashboard/recents.html.tmpl @@ -0,0 +1,132 @@ +[%# 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. + #%] + +<style> + .yui-skin-sam .yui-dt table {width:100%;} +</style> + +<script type="text/javascript"> +<!-- +var column_defs = [ + { key:"id", label:"ID", sortable:true, sortOptions:{ sortFunction:sortBugIdLinks } }, + { key:"bug_status", label:"Status", sortable:true }, + { key:"version", label:"Version", sortable:true }, + { key:"component", label:"Component", sortable:true }, + { key:"bug_severity", label:"Severity", sortable:true, sortOptions:{ sortFunction:sortBugSeverity } }, + { key:"Summary", label:"Summary", sortable:false }, +]; +var fields = [ + { key:"id" }, + { key:"bug_status" }, + { key:"version" }, + { key:"component" }, + { key:"bug_severity" }, + { key:"Summary" } +]; +addStatListener("recently_opened", "recently_opened_table", column_defs, fields, { + [% IF recently_opened.size > 25 %] paginator: new YAHOO.widget.Paginator({ rowsPerPage: 25 }) [% END %] +}); +addStatListener("recently_closed", "recently_closed_table", column_defs, fields, { + [% IF recently_closed.size > 25 %] paginator: new YAHOO.widget.Paginator({ rowsPerPage: 25 }) [% END %] +}); +--> +</script> + +<p> + Activity within the last <input type="text" size="4" name="recent_days" + value="[% recent_days FILTER html %]"> + days (between 1 and 100) or from + <input name="date_from" size="10" id="date_from" + value="[% date_from FILTER html %]" + onchange="updateCalendarFromField(this)"> + <button type="button" class="calendar_button" + id="button_calendar_date_from" + onclick="showCalendar('date_from')"> + <span>Calendar</span> + </button> + <span id="con_calendar_date_from"></span> + to + <input name="date_to" size="10" id="date_to" + value="[% date_to FILTER html %]" + onchange="updateCalendarFromField(this)"> + <button type="button" class="calendar_button" + id="button_calendar_date_to" + onclick="showCalendar('date_to')"> + <span>Calendar</span> + </button> + <span id="con_calendar_date_to"></span> + <script type="text/javascript"> + createCalendar('date_from') + createCalendar('date_to') + </script> + <input type="submit" name="change" value="Change"> +</p> +<p> + <a href="#recently_opened">Recently Opened</a> + <span class="separator"> | </span> + <a href="#recently_closed">Recently Closed</a> +</p> + +<div class="yui-skin-sam"> + <a name="recently_opened"></a> + <b>[% recently_opened.size FILTER html %] Recently Opened [% terms.Bugs %]</b> + <div id="recently_opened"> + <table id="recently_opened_table" cellspacing="3" cellpadding="0" border="0" width="100%"> + <thead> + <tr bgcolor="#CCCCCC"> + [% FOREACH column = [ "ID", "Status", "Version", "Component", "Severity" "Summary" ] %] + <th>[% column FILTER html %]</th> + [% END %] + </tr> + </thead> + <tbody> + [% FOREACH bug = recently_opened %] + [% count = loop.count() %] + <tr class="[%+ count % 2 == 1 ? "bz_row_odd" : "bz_row_even" -%]"> + <td align="center"><a href="[% urlbase FILTER none %]show_bug.cgi?id=[% bug.id FILTER uri %]"> + [% bug.id FILTER html %]</a></td> + <td align="center">[% bug.status FILTER html %]</td> + <td align="center">[% bug.version FILTER html %]</td> + <td align="center">[% bug.component FILTER html %]</td> + <td align="center">[% bug.severity FILTER html %]</td> + <td>[% bug.summary FILTER html %]</td> + </tr> + [% END %] + </tbody> + </table> + </div> + <br> + <a name="recently_closed"></a> + <b>[% recently_closed.size FILTER html %] Recently Closed [% terms.Bugs %]</b> + (<a href="#top">back to top</a>) + <div id="recently_closed"> + <table id="recently_closed_table" cellspacing="3" cellpadding="0" border="0" width="100%"> + <thead> + <tr bgcolor="#CCCCCC"> + [% FOREACH column = [ "ID", "Status", "Version", "Component", "Severity" "Summary" ] %] + <th>[% column FILTER html %]</th> + [% END %] + </tr> + </thead> + <tbody> + [% FOREACH bug = recently_closed %] + [% count = loop.count() %] + <tr class="[%+ count % 2 == 1 ? "bz_row_odd" : "bz_row_even" -%]"> + <td align="center"><a href="[% urlbase FILTER none %]show_bug.cgi?id=[% bug.id FILTER uri %]"> + [% bug.id FILTER html %]</a></td> + <td align="center">[% bug.status FILTER html %]</td> + <td align="center">[% bug.version FILTER html %]</td> + <td align="center">[% bug.component FILTER html %]</td> + <td align="center">[% bug.severity FILTER html %]</td> + <td>[% bug.summary FILTER html %]</td> + </tr> + [% END %] + </tbody> + </table> + </div> +</div> diff --git a/extensions/ProductDashboard/template/en/default/pages/productdashboard/roadmap.html.tmpl b/extensions/ProductDashboard/template/en/default/pages/productdashboard/roadmap.html.tmpl new file mode 100644 index 000000000..fad1cafa5 --- /dev/null +++ b/extensions/ProductDashboard/template/en/default/pages/productdashboard/roadmap.html.tmpl @@ -0,0 +1,54 @@ +[%# 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. + #%] + +<script type="text/javascript"> +<!-- +var column_defs = [ + { key:"milestone", label:"Milestone", sortable:true }, + { key:"percentage complete", label:"Percentage Complete", sortable:false }, + { key:"links", label:"Links", sortable:false }, +]; +var fields = [ + { key:"milestone" }, + { key:"percentage complete" }, + { key:"links" } +]; + +addStatListener("bug_milestones", "bug_milestones_table", column_defs, fields, {}); +--> +</script> + +<div class="yui-skin-sam"> +<div id="bug_milestones"> + <table id="bug_milestones_table" border="0" cellspacing="3" cellpadding="0"> + <thead> + <tr> + <th>Milestone</th> + <th>Percentage Complete</th> + <th>Links</th> + </tr> + </thead> + <tbody> + [% FOREACH milestone = by_roadmap %] + <tr> + <td>[% milestone.name FILTER html %]</td> + <td width="70%"> + [% INCLUDE bar_graph count = milestone.closed_bugs full_bug_count = milestone.total_bugs %] + </td> + <td> + <a href="[% milestone.link_closed FILTER html %]"> + [% milestone.closed_bugs FILTER html %]</a> of + <a href="[% milestone.link_total FILTER html %]"> + [% milestone.total_bugs FILTER html %]</a> bugs have been closed + </td> + </tr> + [% END %] + </tbody> + </table> + </div> +</div> diff --git a/extensions/ProductDashboard/template/en/default/pages/productdashboard/summary.html.tmpl b/extensions/ProductDashboard/template/en/default/pages/productdashboard/summary.html.tmpl new file mode 100644 index 000000000..c1b0a8854 --- /dev/null +++ b/extensions/ProductDashboard/template/en/default/pages/productdashboard/summary.html.tmpl @@ -0,0 +1,205 @@ +[%# 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. + #%] + +<script type="text/javascript"> +<!-- +var column_defs = [ + { key:"name", label:"Name", sortable:true }, + { key:"count", label:"Count", sortable:true }, + { key:"percentage", label:"Percentage", sortable:false } +]; +var fields = [ + { key:"name" }, + { key:"count", parser:"number" }, + { key:"percentage" } +]; +addStatListener("bug_counts", "bug_counts_table", column_defs, fields, {}); +addStatListener("status_counts", "status_counts_table", column_defs, fields, {}); +addStatListener("priority_counts", "priority_counts_table", column_defs, fields, {}); +addStatListener("severity_counts", "severity_counts_table", column_defs, fields, {}); +addStatListener("assignee_counts", "assignee_counts_table", column_defs, fields, {}); +--> +</script> + +<p> + <a href="#counts">Counts</a> + <span class="separator"> | </span> + <a href="#status">Status</a> + <span class="separator"> | </span> + <a href="#priority">Priority</a> + <span class="separator"> | </span> + <a href="#severity">Severity</a> + <span class="separator"> | </span> + <a href="#assignee">Assignee</a> +</p> + +<div class="yui-skin-sam"> + <a name="counts"></a> + <b>[% terms.Bug %] Counts</b> + <div id="bug_counts"> + <table id="bug_counts_table" border="0" cellspacing="3" cellpadding="0"> + <thead> + <tr> + <th>Name</th> + <th>Count</th> + <th>Percentage</th> + </tr> + </thead> + <tbody> + <tr> + <td><a href="[% bug_link_all FILTER html %]">Total [% terms.Bugs %]</a></td> + <td>[% total_bugs FILTER html %]</td> + <td> </td> + </tr> + <tr> + <td><a href="[% bug_link_open FILTER html %]">Open [% terms.Bugs %]</a></td> + <td>[% total_open_bugs FILTER html %]</td> + <td width="70%"> + [% INCLUDE bar_graph count = total_open_bugs full_bug_count = total_bugs %] + </td> + </tr> + <tr> + <td><a href="[% bug_link_closed FILTER html %]">Closed [% terms.Bugs %]</a></td> + <td>[% total_closed_bugs FILTER html %]</td> + <td width="70%"> + [% INCLUDE bar_graph count = total_closed_bugs full_bug_count = total_bugs %] + </td> + </tr> + </tbody> + </table> + </div> + <br> + <a name="status"></a> + <b>Status</b> + (<a href="#top">back to top</a>) + <div id="status_counts"> + <table id="status_counts_table" border="0" cellspacing="3" cellpadding="0"> + <thead> + <tr> + <th>Name</th> + <th>Count</th> + <th>Percentage</th> + </tr> + </thead> + <tbody> + [% FOREACH col = by_status %] + [% NEXT IF col.0 == 'CLOSED' %] + <tr> + <td> + <a href="[% bug_link_all FILTER html %]&bug_status=[% col.0 FILTER uri %]"> + [% col.0 FILTER html %]</a> + </td> + <td> + [% col.1 FILTER html %] + </td> + <td width="70%"> + [% INCLUDE bar_graph count = col.1 %] + </td> + </tr> + [% END %] + </tbody> + </table> + </div> + <br> + <a name="priority"></a> + <b>Priority</b> + (<a href="#top">back to top</a>) + <div id="priority_counts"> + <table id="priority_counts_table" border="0" cellspacing="3" cellpadding="0"> + <thead> + <tr> + <th>Name</th> + <th>Count</th> + <th>Percentage</th> + </tr> + </thead> + </tbody> + [% FOREACH col = by_priority %] + <tr> + <td> + <a href="[% bug_link FILTER html %]&priority=[% col.0 FILTER uri %]"> + [% col.0 FILTER html %]</a> + </td> + <td> + [% col.1 FILTER html %] + </td> + <td width="70%"> + [% INCLUDE bar_graph count = col.1 %] + </td> + </tr> + [% END %] + </tbody> + </table> + </div> + <br> + <a name="severity"></a> + <b>Severity</b> + (<a href="#top">back to top</a>) + <div id="severity_counts"> + <table id="severity_counts_table" border="0" cellspacing="3" cellpadding="0"> + <thead> + <tr> + <th>Name</th> + <th>Count</th> + <th>Percentage</th> + </tr> + </thead> + <tbody> + [% FOREACH col = by_severity %] + <tr> + <td> + <a href="[% bug_link FILTER html %]&bug_severity=[% col.0 FILTER uri %]"> + [% col.0 FILTER html %]</a> + </td> + <td align="right"> + [% col.1 FILTER html %] + </td> + <td width="70%"> + [% INCLUDE bar_graph count = col.1 %] + </td> + </tr> + [% END %] + </tbody> + </table> + </div> + <br> + <a name="assignee"></a> + <b>Assignee</b> + (<a href="#top">back to top</a>) + <div id="assignee_counts"> + <table id="assignee_counts_table" border="0" cellspacing="3" cellpadding="0"> + <thead> + <tr> + <th>Name</th> + <th>Count</th> + <th>Percentage</th> + </tr> + </thead> + <tbody> + [% FOREACH col = by_assignee %] + <tr> + <td> + [% IF user.id %] + <a href="[% bug_link FILTER html %]&emailassigned_to1=1&emailtype1=exact&email1=[% col.0.email FILTER uri %]"> + [% col.0.email FILTER html %]</a> + [% ELSE %] + [% col.0.realname || "No Name" FILTER html %] + [% END %] + </td> + <td> + [% col.1 FILTER html %] + </td> + <td width="70%"> + [% INCLUDE bar_graph count = col.1 %] + </td> + </tr> + [% END %] + </tbody> + </table> + </div> +</div> |