1[%# This Source Code Form is subject to the terms of the Mozilla Public
2  # License, v. 2.0. If a copy of the MPL was not distributed with this
3  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4  #
5  # This Source Code Form is "Incompatible With Secondary Licenses", as
6  # defined by the Mozilla Public License, v. 2.0.
7  #%]
8
9[% filtered_desc = blocked_tree.$bugid.short_desc FILTER html %]
10[% PROCESS global/header.html.tmpl
11   title           = "$terms.Bug $bugid の依存ツリー"
12   header          = "<a href=\"show_bug.cgi?id=$bugid\">$terms.Bug $bugid</a> の依存ツリー"
13   javascript_urls = ["js/expanding-tree.js"]
14   style_urls      = ['skins/standard/bug.css']
15   subheader       = filtered_desc
16   doc_section     = "using/understanding.html"
17%]
18
19[% PROCESS depthControlToolbar %]
20
21[% INCLUDE tree_section ids=dependson_ids type=1 %]
22
23[% INCLUDE tree_section ids=blocked_ids type=2 %]
24
25[% PROCESS depthControlToolbar %]
26
27[% PROCESS global/footer.html.tmpl %]
28
29[%###########################################################################%]
30[%# Tree-drawing blocks                                                     #%]
31[%###########################################################################%]
32
33[% BLOCK tree_section %]
34  [%# INTERFACE
35    #   - ids: a list of bug IDs to be displayed as children
36    #   - type: the type of tree. 1 = depends on, 2 = blockeds
37    # GLOBALS
38    #   - seen: Maintains a global hash of bugs that have been displayed
39    #%]
40  [% global.seen = {} %]
41  [%# Display the tree of bugs that this bug depends on. %]
42  <h3>
43    <a href="show_bug.cgi?id=[% bugid %]">[% terms.Bug %] [%+ bugid %]</a>
44    [% IF type == 1 %]
45        [% tree_name = "dependson_tree" %]
46        [% IF ids.size %]
47            の依存先は
48        [% ELSE %]
49            はどの [% '活動中の' IF hide_resolved %][% terms.bugs %] にも依存しません。
50        [% END %]
51    [% ELSIF type == 2 %]
52        [% tree_name = "blocked_tree" %]
53        [% IF ids.size %]
54            の妨害先は
55        [% ELSE %]
56            はどの [% '活動中の' IF hide_resolved %][% terms.bugs %] も妨害しません。
57        [% END %]
58    [% END %]
59    [% IF ids.size %]
60        [%+ IF hide_resolved %]閉じられていない[% END %]
61        [%+ (ids.size == 1) ? "1" : ids.size %]
62        [%+ (ids.size == 1) ? terms.bug : terms.bugs %]:
63    [% END %]
64  </h3>
65  [% IF ids.size %]
66    [%# 27 chars is the length of buglist.cgi?tweak=&bug_id=" %]
67    [% use_post = (ids.join(",").length > constants.CGI_URI_LIMIT - 27 ) ? 1 : 0 %]
68    [% IF use_post %]
69      <form action="buglist.cgi" method="post">
70      <input type="hidden" name="bug_id" value="[% ids.join(",") %]">
71    [% END %]
72
73    [% IF maxdepth -%]最大 [% maxdepth %] 階層 | [% END -%]
74    [% IF use_post %]
75      <button>[% terms.bug %] リストとしてみる</button>
76      [% IF user.in_group('editbugs') && ids.size > 1 %]
77        | <button type="submit" name="tweak" value="1">一度に変更する</button>
78      [% END %]
79      </form>
80    [% ELSE %]
81      <a href="buglist.cgi?bug_id=[% ids.join(",") %]">[% terms.bug %] リストとしてみる</a>
82      [% IF user.in_group('editbugs') && ids.size > 1 %]
83        | <a href="buglist.cgi?bug_id=[% ids.join(",") %]&amp;tweak=1">一度に変更する</a>
84      [% END %]
85    [% END %]
86
87    <ul class="tree">
88      [% INCLUDE display_tree tree=$tree_name %]
89    </ul>
90  [% END %]
91[% END %]
92
93
94[% BLOCK display_tree %]
95  [%# INTERFACE
96    #   - bugid: the ID of the bug being displayed
97    #   - tree: a hash of bug objects and of bug dependencies
98    #%]
99  [% bug = tree.$bugid %]
100  <li>
101    [%- INCLUDE bullet bugid=bugid tree=tree -%]
102    <span class="summ[% "_deep" IF tree.dependencies.$bugid.size %]"
103          id="[% bugid FILTER html %]"
104          [% IF global.seen.$bugid %]
105            onMouseover="duplicatedover('[% bugid FILTER html %]')"
106            onMouseout="duplicatedout('[% bugid FILTER html %]')"
107          [% END %]>
108      [%- INCLUDE buglink bug=bug bugid=bugid %]
109    </span>
110    [% IF global.seen.$bugid %]
111      <b><a title="すでに上に表示されています; クリックで飛びます"
112            onclick="duplicated('[% bugid FILTER html %]')"
113            href="#b[% bugid %]">(*)</a></b>
114    [% ELSIF tree.dependencies.$bugid.size %]
115      <ul>
116        [% FOREACH depid = tree.dependencies.$bugid %]
117          [% INCLUDE display_tree bugid=depid %]
118        [% END %]
119      </ul>
120    [% END %]
121  </li>
122  [% global.seen.$bugid = 1 %]
123[% END %]
124
125[% BLOCK bullet %]
126  [% IF tree.dependencies.$bugid.size && ! global.seen.$bugid %]
127    [% extra_class = " b_open" %]
128    [% extra_args = 'onclick="return doToggle(this, event)"' %]
129  [% END %]
130  <a id="b[% bugid %]"
131     class="b [%+ extra_class FILTER none %]"
132     title="ツリーのこの部分をクリックすると閉じたり開いたりします。クリックする時に Ctrl キーを同時に押すと全てのサブツリーを同時に開いたり閉じたりします。"
133     [% extra_args FILTER none %]>&nbsp;&nbsp;</a>
134[% END %]
135
136[% BLOCK buglink %]
137  [% isclosed = !bug.isopened %]
138  [% FILTER closed(isclosed) -%]
139    <a title="[% INCLUDE buginfo bug=bug %]"
140       href="show_bug.cgi?id=[% bugid %]">
141      <b>[%- bugid %]:</b>
142      <span class="summ_text">[%+ bug.short_desc FILTER html %]</span>
143      <span class="summ_info">[[% INCLUDE buginfo %]]</span>
144    </a>
145    <a href="showdependencytree.cgi?id=[% bugid FILTER uri %]"
146       class="tree_link">
147      <img src="skins/standard/dependency-tree/tree.png"
148           title="[% terms.bug %] [%+ bugid FILTER html %] の依存ツリーを見る">
149    </a>
150  [% END %]
151[% END %]
152
153[% BLOCK buginfo %]
154  [% display_value("bug_status", bug.bug_status) FILTER html -%]
155  [%- IF bug.resolution %] [%+ display_value("resolution", bug.resolution) FILTER html %][% END %];
156  [%-%] 担当者 [% bug.assigned_to.login FILTER email FILTER html %]
157  [% IF Param("usetargetmilestone") AND bug.target_milestone %]
158    [%-%]; ターゲット: [% bug.target_milestone FILTER html %]
159  [% END %]
160[% END %]
161
162[%###########################################################################%]
163[%# Block for depth control toolbar                                         #%]
164[%###########################################################################%]
165
166[% BLOCK depthControlToolbar %]
167 <table class="dependency_tree_controls">
168   <tr>
169   [%# Hide/show resolved button
170       Swaps text depending on the state of hide_resolved %]
171   <td>
172   <form method="get" action="showdependencytree.cgi">
173     <input name="id" type="hidden" value="[% bugid %]">
174     [% IF maxdepth %]
175       <input name="maxdepth" type="hidden" value="[% maxdepth %]">
176     [% END %]
177     <input type="hidden" name="hide_resolved" value="[% hide_resolved ? 0 : 1 %]">
178     <input type="submit" id="toggle_visibility"
179            value="解決済みを[% IF hide_resolved %]表示[% ELSE %]非表示[% END %]">
180   </form>
181   </td>
182
183   <td>
184     最大階層:
185   </td>
186
187   <td>
188     &nbsp;
189   </td>
190
191   <td>
192   <form method="get" action="showdependencytree.cgi">
193     [%# set to one form %]
194     <input type="submit" id="change_maxdepth" value="1"
195       [% "disabled" IF realdepth < 2 || maxdepth == 1 %]>
196     <input name="id" type="hidden" value="[% bugid %]">
197     <input name="maxdepth" type="hidden" value="1">
198     <input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
199   </form>
200   </td>
201
202   <td>
203   <form method="get" action="showdependencytree.cgi">
204     [%# Minus one form
205         Allow subtracting only when realdepth and maxdepth > 1 %]
206     <input name="id" type="hidden" value="[% bugid %]">
207     <input name="maxdepth" type="hidden" value="[%
208         maxdepth == 1 ? 1
209                       : ( maxdepth ? maxdepth - 1 : realdepth - 1 )
210     %]">
211     <input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
212     <input type="submit" id="decrease_depth" value="&lt;"
213       [% "disabled" IF realdepth < 2 || ( maxdepth && maxdepth < 2 ) %]>
214   </form>
215   </td>
216
217   <td>
218   <form method="get" action="showdependencytree.cgi">
219     [%# Limit entry form: the button can not do anything when total depth
220         is less than two, so disable it %]
221     <input name="maxdepth" size="4" maxlength="4" value="[%
222         maxdepth > 0 && maxdepth <= realdepth ? maxdepth : ""
223     %]">
224     <input name="id" type="hidden" value="[% bugid %]">
225     <input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
226     <noscript>
227       <input type="submit" id="change_depth" value="変更"
228              [% "disabled" IF realdepth < 2 %]>
229     </noscript>
230   </form>
231   </td>
232
233   <td>
234   <form method="get" action="showdependencytree.cgi">
235     [%# plus one form
236         Disable button if total depth < 2, or if depth set to unlimited %]
237     <input name="id" type="hidden" value="[% bugid %]">
238     [% IF maxdepth %]
239       <input name="maxdepth" type="hidden" value="[% maxdepth + 1 %]">
240     [% END %]
241     <input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
242     <input type="submit" id="increase_depth" value="&gt;"
243        [% "disabled" IF realdepth < 2 || !maxdepth || maxdepth >= realdepth %]>
244   </form>
245   </td>
246
247   <td>
248   <form method="get" action="showdependencytree.cgi">
249     [%# Unlimited button %]
250     <input name="id" type="hidden" value="[% bugid %]">
251     <input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
252     <input type="submit" id="remove_limit"
253       value="無制限"
254       [% "disabled" IF maxdepth == 0 || maxdepth == realdepth %]>
255   </form>
256   </td>
257 </tr>
258</table>
259
260[% END %]
261