[%# 1.0@bugzilla.org %] [%# 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): Tobias Burnus <burnus@net-b.de> # Ville Skyttä <ville.skytta@iki.fi> # Myk Melez <myk@mozilla.org> #%] [% PROCESS global/variables.none.tmpl %] [% filtered_desc = blocked_tree.$bugid.summary FILTER html %] [% PROCESS global/header.html.tmpl title = "Dependency tree for $terms.Bug $bugid" h1 = "Dependency tree for <a href=\"show_bug.cgi?id=$bugid\">$terms.Bug $bugid</a>" h2 = filtered_desc %] [% PROCESS depthControlToolbar %] [%# Display the tree of bugs that this bug depends on. %] <h3> [% IF hide_resolved %] Open [% terms.bugs %] [% ELSE %] [% terms.Bugs %] [% END %] that <a href="show_bug.cgi?id=[% bugid %]">[% terms.bug %] [%+ bugid %]</a> depends on</h3> [% IF dependson_ids.size > 0 %] ( [% IF maxdepth -%]Up to [% maxdepth %] level[% "s" IF maxdepth > 1 %] deep | [% END %] <a href="buglist.cgi?bug_id=[% dependson_ids.join(",") %]">view as [% terms.bug %] list</a> [% IF canedit && dependson_ids.size > 1 %] | <a href="buglist.cgi?bug_id=[% dependson_ids.join(",") %]&tweak=1">change several</a> [% END %]) [% INCLUDE display_tree tree=dependson_tree bug_id=bugid %] [% ELSE %] </h3> <p>None</p> [% END %] [%# Display the tree of bugs that this bug blocks. %] <h3> [% IF hide_resolved %] Open [% terms.bugs %] [% ELSE %] [% terms.Bugs %] [% END %] that <a href="show_bug.cgi?id=[% bugid %]">[% terms.bug %] [%+ bugid %]</a> blocks</h3> [% IF blocked_ids.size > 0 %] ( [% IF maxdepth -%]Up to [% maxdepth %] level[% "s" IF maxdepth > 1 %] deep | [% END %] <a href="buglist.cgi?bug_id=[% blocked_ids.join(",") %]">view as [% terms.bug %] list</a> [% IF canedit && blocked_ids.size > 1 %] | <a href="buglist.cgi?bug_id=[% blocked_ids.join(",") %]&tweak=1">change several</a> [% END %]) [% INCLUDE display_tree tree=blocked_tree bug_id=bugid %] [% ELSE %] </h3> <p>None</p> [% END %] [% PROCESS depthControlToolbar %] [%###########################################################################%] [%# Block to display a tree #%] [%###########################################################################%] [% BLOCK display_tree %] [% tree.$bug_id.seen = 1 %] <ul> [% FOREACH dep_id = tree.$bug_id.dependencies %] [% dep = tree.$dep_id %] <li> [% "<script>document.write('<a href=\"#\" class=\"toggle\" onclick=\"listToggle(event); return false\">[-]</a>')</script>" IF dep.dependencies.size > 0 && !dep.seen %] [% isclosed = !dep.open %] [% FILTER closed(isclosed) %] <a href="show_bug.cgi?id=[% dep_id %]">[% dep_id %] [[% IF dep.milestone %][% dep.milestone FILTER html %], [% END %] [% dep.assignee_email FILTER html %]] - [% IF dep.seen %] <i>This [% terms.bug %] appears elsewhere in this tree.</i></a> [% ELSE %] [%+ dep.summary FILTER html %].</a> [% END %] [% END %] [% INCLUDE display_tree bug_id=dep_id IF dep.dependencies.size > 0 && !dep.seen %] </li> [% END %] </ul> [% END %] <script type="text/javascript"> if (typeof Node == 'undefined') { /* MSIE doesn't define Node, so provide a compatibility object */ window.Node = { TEXT_NODE: 3 }; } function toggleDisplay(node) { var display = node.style.display; if (display == "none") { node.style.display = ("oldDisplay" in node) ? node.oldDisplay : "block"; return true; } node.oldDisplay = display; node.style.display = "none"; return false; } function listToggle(event) { var node = event.target; if (!node) node = event.srcElement; if (node.nodeType == Node.TEXT_NODE) node = node.parentNode; var toggle = node.nextSibling; while (toggle && toggle.tagName != "UL") toggle = toggle.nextSibling; if (toggle) { node.firstChild.data = toggleDisplay(toggle) ? "[-]" : "[+]"; } } </script> [% PROCESS global/footer.html.tmpl %] [%###########################################################################%] [%# Block for depth control toolbar #%] [%###########################################################################%] [% BLOCK depthControlToolbar %] <table cellpadding="3" border="0" cellspacing="0" bgcolor="#d0d0d0"> <tr> [%# Hide/show resolved button Swaps text depending on the state of hide_resolved %] <td align="center"> <form method="get" action="showdependencytree.cgi" style="display: inline; margin: 0px;"> <input name="id" type="hidden" value="[% bugid %]"> [% IF maxdepth %] <input name="maxdepth" type="hidden" value="[% maxdepth %]"> [% END %] <input type="hidden" name="hide_resolved" value="[% hide_resolved ? 0 : 1 %]"> <input type="submit" value="[% IF hide_resolved %]Show[% ELSE %]Hide[% END %] Resolved"> </form> </td> <td> Max Depth: </td> <td> </td> <td> <form method="get" action="showdependencytree.cgi" style="display: inline; margin: 0px;"> [%# set to one form %] <input type="submit" value=" 1 " [% "disabled" IF realdepth < 2 || maxdepth == 1 %]> <input name="id" type="hidden" value="[% bugid %]"> <input name="maxdepth" type="hidden" value="1"> <input name="hide_resolved" type="hidden" value="[% hide_resolved %]"> </form> </td> <td> <form method="get" action="showdependencytree.cgi" style="display: inline; margin: 0px;"> [%# Minus one form Allow subtracting only when realdepth and maxdepth > 1 %] <input name="id" type="hidden" value="[% bugid %]"> <input name="maxdepth" type="hidden" value="[% maxdepth == 1 ? 1 : ( maxdepth ? maxdepth - 1 : realdepth - 1 ) %]"> <input name="hide_resolved" type="hidden" value="[% hide_resolved %]"> <input type="submit" value=" < " [% "disabled" IF realdepth < 2 || ( maxdepth && maxdepth < 2 ) %]> </form> </td> <td> <form method="get" action="showdependencytree.cgi" style="display: inline; margin: 0px;"> [%# Limit entry form: the button can not do anything when total depth is less than two, so disable it %] <input name="maxdepth" size="4" maxlength="4" value="[% maxdepth > 0 && maxdepth <= realdepth ? maxdepth : "" %]"> <input name="id" type="hidden" value="[% bugid %]"> <input name="hide_resolved" type="hidden" value="[% hide_resolved %]"> <noscript> <input type="submit" value="Change" [% "disabled" IF realdepth < 2 %]> </noscript> </form> </td> <td> <form method="get" action="showdependencytree.cgi" style="display: inline; margin: 0px;"> [%# plus one form Disable button if total depth < 2, or if depth set to unlimited %] <input name="id" type="hidden" value="[% bugid %]"> [% IF maxdepth %] <input name="maxdepth" type="hidden" value="[% maxdepth + 1 %]"> [% END %] <input name="hide_resolved" type="hidden" value="[% hide_resolved %]"> <input type="submit" value=" > " [% "disabled" IF realdepth < 2 || !maxdepth || maxdepth >= realdepth %] %]> </form> </td> <td> <form method="get" action="showdependencytree.cgi" style="display: inline; margin: 0px;"> [%# Unlimited button %] <input name="id" type="hidden" value="[% bugid %]"> <input name="hide_resolved" type="hidden" value="[% hide_resolved %]"> <input type="submit" value=" Unlimited " [% "disabled" IF maxdepth == 0 || maxdepth == realdepth %]> </form> </td> </tr> </table> [% END %]