19
19
# Contributor(s): Tobias Burnus <burnus@net-b.de>
20
20
# Ville Skyttä <ville.skytta@iki.fi>
21
21
# Myk Melez <myk@mozilla.org>
22
# André Batosti <batosti@async.com.br>
24
[% PROCESS global/variables.none.tmpl %]
25
[% PROCESS 'global/field-descs.none.tmpl' %]
26
[% filtered_desc = blocked_tree.$bugid.summary FILTER html %]
27
[% filtered_desc = blocked_tree.$bugid.short_desc FILTER html %]
27
28
[% PROCESS global/header.html.tmpl
28
title = "Dependency tree for $terms.Bug $bugid"
29
h1 = "Dependency tree for <a href=\"show_bug.cgi?id=$bugid\">$terms.Bug $bugid</a>"
29
title = "Dependency tree for $terms.Bug $bugid"
30
header = "Dependency tree for
31
<a href=\"show_bug.cgi?id=$bugid\">$terms.Bug $bugid</a>"
32
javascript_urls = ["js/expanding-tree.js"]
33
style_urls = ["skins/standard/dependency-tree.css"]
34
subheader = filtered_desc
33
37
[% PROCESS depthControlToolbar %]
35
[%# Display the tree of bugs that this bug depends on. %]
37
[% IF hide_resolved %]
42
that <a href="show_bug.cgi?id=[% bugid %]">[% terms.bug %] [%+ bugid %]</a>
44
[% IF dependson_ids.size > 0 %]
46
[% IF maxdepth -%]Up to [% maxdepth %] level[% "s" IF maxdepth > 1 %] deep | [% END %]
47
<a href="buglist.cgi?bug_id=[% dependson_ids.join(",") %]">view as [% terms.bug %] list</a>
48
[% IF canedit && dependson_ids.size > 1 %]
49
| <a href="buglist.cgi?bug_id=[% dependson_ids.join(",") %]&tweak=1">change several</a>
51
[% INCLUDE display_tree tree=dependson_tree bug_id=bugid %]
57
[%# Display the tree of bugs that this bug blocks. %]
59
[% IF hide_resolved %]
64
that <a href="show_bug.cgi?id=[% bugid %]">[% terms.bug %] [%+ bugid %]</a>
66
[% IF blocked_ids.size > 0 %]
68
[% IF maxdepth -%]Up to [% maxdepth %] level[% "s" IF maxdepth > 1 %] deep | [% END %]
69
<a href="buglist.cgi?bug_id=[% blocked_ids.join(",") %]">view as [% terms.bug %] list</a>
70
[% IF canedit && blocked_ids.size > 1 %]
71
| <a href="buglist.cgi?bug_id=[% blocked_ids.join(",") %]&tweak=1">change several</a>
73
[% INCLUDE display_tree tree=blocked_tree bug_id=bugid %]
39
[% INCLUDE tree_section ids=dependson_ids type=1 %]
41
[% INCLUDE tree_section ids=blocked_ids type=2 %]
79
43
[% PROCESS depthControlToolbar %]
81
[%###########################################################################%]
82
[%# Block to display a tree #%]
83
[%###########################################################################%]
45
[% PROCESS global/footer.html.tmpl %]
47
[%###########################################################################%]
48
[%# Tree-drawing blocks #%]
49
[%###########################################################################%]
51
[% BLOCK tree_section %]
53
# - ids: a list of bug IDs to be displayed as children
54
# - type: the type of tree. 1 = depends on, 2 = blockeds
56
# - seen: Maintains a global hash of bugs that have been displayed
58
[% global.seen = {} %]
59
[%# Display the tree of bugs that this bug depends on. %]
61
<a href="show_bug.cgi?id=[% bugid %]">[% terms.Bug %] [%+ bugid %]</a>
63
[% tree_name = "dependson_tree" %]
67
does not depend on any [% terms.bugs %].
70
[% tree_name = "blocked_tree" %]
74
does not block any [% terms.bugs %].
78
[%+ (ids.size == 1) ? "one" : ids.size %]
79
[%+ IF hide_resolved %]open[% END %]
80
[%+ (ids.size == 1) ? terms.bug : terms.bugs %]:
84
([% IF maxdepth -%]Up to [% maxdepth %] level[% "s" IF maxdepth > 1 %] deep | [% END -%]
85
<a href="buglist.cgi?bug_id=[% ids.join(",") %]">view as [% terms.bug %] list</a>
86
[% IF user.groups.editbugs && ids.size > 1 %]
87
| <a href="buglist.cgi?bug_id=[% ids.join(",") %]&tweak=1">change several</a>
90
[% INCLUDE display_tree tree=$tree_name %]
85
96
[% BLOCK display_tree %]
86
[% tree.$bug_id.seen = 1 %]
88
[% FOREACH dep_id = tree.$bug_id.dependencies %]
89
[% dep = tree.$dep_id %]
91
[% "<script>document.write('<a href=\"#\" class=\"toggle\" onclick=\"listToggle(event); return false\">[-]</a>')</script>"
92
IF dep.dependencies.size > 0 && !dep.seen %]
93
[% isclosed = !dep.open %]
94
[% FILTER closed(isclosed) %]
95
<a href="show_bug.cgi?id=[% dep_id %]">[% dep_id %]
96
[[% IF dep.milestone %][% dep.milestone FILTER html %], [% END %]
97
[% dep.assignee_email FILTER html %]] -
99
<i>This [% terms.bug %] appears elsewhere in this tree.</i></a>
101
[%+ dep.summary FILTER html %].</a>
98
# - bugid: the ID of the bug being displayed
99
# - tree: a hash of bug objects and of bug dependencies
101
[% bug = tree.$bugid %]
103
[%- INCLUDE bullet bugid=bugid tree=tree -%]
104
<span class="summ[% "_deep" IF tree.dependencies.$bugid.size %]"
105
id="[% bugid FILTER html %]"
106
[% IF global.seen.$bugid %]
107
onMouseover="duplicatedover('[% bugid FILTER html %]')"
108
onMouseout="duplicatedout('[% bugid FILTER html %]')"
110
[%- INCLUDE buglink bug=bug bugid=bugid %]
112
[% IF global.seen.$bugid %]
113
<b><a title="Already displayed above; click to locate"
114
onclick="duplicated('[% bugid FILTER html %]')"
115
href="#b[% bugid %]">(*)</a></b>
116
[% ELSIF tree.dependencies.$bugid.size %]
118
[% FOREACH depid = tree.dependencies.$bugid %]
119
[% INCLUDE display_tree bugid=depid %]
104
[% INCLUDE display_tree bug_id=dep_id
105
IF dep.dependencies.size > 0 && !dep.seen %]
111
<script type="text/javascript">
112
if (typeof Node == 'undefined') {
113
/* MSIE doesn't define Node, so provide a compatibility object */
119
function toggleDisplay(node)
121
var display = node.style.display;
122
if (display == "none") {
124
("oldDisplay" in node) ? node.oldDisplay : "block";
128
node.oldDisplay = display;
129
node.style.display = "none";
133
function listToggle(event)
135
var node = event.target;
137
node = event.srcElement;
138
if (node.nodeType == Node.TEXT_NODE)
139
node = node.parentNode;
140
var toggle = node.nextSibling;
141
while (toggle && toggle.tagName != "UL")
142
toggle = toggle.nextSibling;
144
node.firstChild.data = toggleDisplay(toggle) ? "[-]" : "[+]";
150
[% PROCESS global/footer.html.tmpl %]
124
[% global.seen.$bugid = 1 %]
128
[% IF tree.dependencies.$bugid.size && ! global.seen.$bugid %]
129
[% extra_class = " b_open" %]
130
[% extra_args = 'onclick="return doToggle(this, event)"' %]
132
<a name="b[% bugid %]"
133
class="b [%+ extra_class FILTER none %]"
134
title="Click to expand or contract this portion of the tree. Hold down the Ctrl key while clicking to expand or contract all subtrees."
135
[% extra_args FILTER none %]> </a>
139
[% isclosed = !bug.isopened %]
140
[% FILTER closed(isclosed) -%]
141
<a title="[% INCLUDE buginfo bug=bug %]"
142
href="show_bug.cgi?id=[% bugid %]">
144
<span class="summ_text">[%+ bug.short_desc FILTER html %]</span>
145
<span class="summ_info">[[% INCLUDE buginfo %]]</span>
147
<a href="showdependencytree.cgi?id=[% bugid FILTER url_quote %]"
149
<img src="skins/standard/dependency-tree/tree.png"
150
title="See dependency tree for [% terms.bug %] [%+ bugid FILTER html %]">
156
[% status_descs.${bug.bug_status} FILTER html -%] [%+ get_resolution(bug.resolution) FILTER html %];
157
[%-%] assigned to [% bug.assigned_to.login FILTER html %]
158
[%-%][% "; Target: " _ bug.target_milestone IF bug.target_milestone %]
152
161
[%###########################################################################%]
153
162
[%# Block for depth control toolbar #%]
154
163
[%###########################################################################%]
156
165
[% BLOCK depthControlToolbar %]
157
<table cellpadding="3" border="0" cellspacing="0" bgcolor="#d0d0d0">
166
<table cellpadding="3" border="0" cellspacing="0" bgcolor="#e0e0e0">
159
168
[%# Hide/show resolved button
160
169
Swaps text depending on the state of hide_resolved %]
161
170
<td align="center">