root/trac/templates/ticket.cs

リビジョン 287, 13.6 kB (コミッタ: anonymous, コミット時期: 4 年 前)

Added trac template files.

Line 
1 <?cs include "header.cs" ?>
2 <?cs include "macros.cs" ?>
3
4 <div id="ctxtnav" class="nav">
5  <h2>チケットナビゲーション</h2><?cs
6  with:links = chrome.links ?><?cs
7   if:len(links.prev) || len(links.up) || len(links.next) ?><ul><?cs
8    if:len(links.prev) ?>
9     <li class="first<?cs if:!len(links.up) && !len(links.next) ?> last<?cs /if ?>">
10      &larr; <a href="<?cs var:links.prev.0.href ?>" title="<?cs
11        var:links.prev.0.title ?>">前のチケット</a>
12     </li><?cs
13    /if ?><?cs
14    if:len(links.up) ?>
15     <li class="<?cs if:!len(links.prev) ?>first<?cs /if ?><?cs
16                     if:!len(links.next) ?> last<?cs /if ?>">
17      <a href="<?cs var:links.up.0.href ?>" title="<?cs
18        var:links.up.0.title ?>">クエリに戻る</a>
19     </li><?cs
20    /if ?><?cs
21    if:len(links.next) ?>
22     <li class="<?cs if:!len(links.prev) && !len(links.up) ?>first <?cs /if ?>last">
23      <a href="<?cs var:links.next.0.href ?>" title="<?cs
24        var:links.next.0.title ?>">次のチケット</a> &rarr;
25     </li><?cs
26    /if ?></ul><?cs
27   /if ?><?cs
28  /with ?>
29 </div>
30
31 <div id="content" class="ticket">
32
33  <h1>チケット #<?cs var:ticket.id ?> <span class="status">(<?cs
34   var:ticket.status ?><?cs
35   if:ticket.type ?> <?cs var:ticket.type ?><?cs
36   /if ?><?cs
37   if:ticket.resolution ?>: <?cs var:ticket.resolution ?><?cs
38   /if ?>)</span></h1>
39
40 <div id="searchable">
41 <div id="ticket">
42  <div class="date">
43   <p title="<?cs var:ticket.opened ?>">登録: <?cs var:ticket.opened_delta ?> 前</p><?cs
44   if:ticket.lastmod ?>
45    <p title="<?cs var:ticket.lastmod ?>">最終更新: <?cs var:ticket.lastmod_delta ?> 前</p>
46   <?cs /if ?>
47  </div>
48  <h2 class="summary"><?cs var:ticket.summary ?></h2>
49  <table class="properties">
50   <tr>
51    <th id="h_reporter">報告者:</th>
52    <td headers="h_reporter"><?cs var:ticket.reporter ?></td>
53    <th id="h_owner">担当者:</th>
54    <td headers="h_owner"><?cs var:ticket.owner ?><?cs
55      if:ticket.status == 'assigned' ?> (着手済み)<?cs /if ?></td>
56   </tr><tr><?cs
57   each:field = ticket.fields ?><?cs
58    if:!field.skip ?><?cs
59     set:num_fields = num_fields + 1 ?><?cs
60    /if ?><?cs
61   /each ?><?cs
62   set:idx = 0 ?><?cs
63   each:field = ticket.fields ?><?cs
64    if:!field.skip ?><?cs set:fullrow = field.type == 'textarea' ?><?cs
65     if:fullrow && idx % 2 ?><th></th><td></td></tr><tr><?cs /if ?>
66     <th id="h_<?cs var:name(field) ?>"><?cs var:field.label ?>:</th>
67     <td<?cs if:fullrow ?> colspan="3"<?cs /if ?> headers="h_<?cs
68       var:name(field) ?>"><?cs var:ticket[name(field)] ?></td><?cs
69     if:idx % 2 || fullrow ?></tr><tr><?cs
70     elif:idx == num_fields - 1 ?><th></th><td></td><?cs
71     /if ?><?cs set:idx = idx + #fullrow + 1 ?><?cs
72    /if ?><?cs
73   /each ?></tr>
74  </table><?cs
75  if:ticket.description ?>
76   <form method="get" action="<?cs var:ticket.href ?>#comment" class="printableform">
77    <div class="description">
78     <h3 id="comment:description"><?cs
79      if:trac.acl.TICKET_APPEND ?>
80      <span class="inlinebuttons">
81       <input type="hidden" name="replyto" value="description" />
82       <input type="submit" value="返信" title="チケットの概要に返信" />
83      </span><?cs
84      /if ?>
85      チケットの概要 <?cs
86      if:ticket.description.lastmod ?><span class="lastmod" title="<?cs var:ticket.description.lastmod ?>">(最終更新者: <?cs var:ticket.description.author ?>)</span><?cs
87      /if ?>
88     </h3>
89     <?cs var:ticket.description.formatted ?>
90    </div>
91   </form><?cs
92  /if ?>
93 </div>
94
95 <?cs if:ticket.attach_href || len(ticket.attachments) ?>
96 <?cs call:list_of_attachments(ticket.attachments, ticket.attach_href) ?>
97 <?cs /if ?>
98
99 <?cs def:commentref(prefix, cnum) ?>
100 <a href="#comment:<?cs var:cnum ?>"><small><?cs var:prefix ?><?cs if:cnum == "description" ?>チケットの概要<?cs else ?><?cs var:cnum ?><?cs /if ?></small></a>
101 <?cs /def ?>
102
103 <?cs if:len(ticket.changes) ?><h2>チケットの履歴</h2>
104 <div id="changelog"><?cs
105  each:change = ticket.changes ?>
106  <form method="get" action="<?cs var:ticket.href ?>#comment" class="printableform">
107  <div class="change">
108   <h3 <?cs if:change.cnum ?>id="comment:<?cs var:change.cnum ?>"<?cs /if ?>><?cs
109    if:change.cnum ?><?cs
110     if:trac.acl.TICKET_APPEND ?>
111     <span class="inlinebuttons">
112      <input type="hidden" name="replyto" value="<?cs var:change.cnum ?>" />
113      <input type="submit" value="返信" title="コメント <?cs var:change.cnum ?> に返信" />
114     </span><?cs
115     /if ?>
116     <span class="threading"><?cs
117      set:nreplies = len(ticket.replies[change.cnum]) ?><?cs
118      if:nreplies || change.replyto ?>(<?cs
119       if:change.replyto ?>親コメント: <?cs
120        call:commentref('&uarr;&nbsp;', change.replyto) ?><?cs if nreplies ?>; <?cs /if ?><?cs
121       /if ?><?cs
122       if nreplies ?>
123        フォローアップ:<?cs
124        each:reply = ticket.replies[change.cnum] ?><?cs
125         call:commentref('&darr;&nbsp;', reply) ?><?cs
126        /each ?><?cs
127       /if ?>)<?cs
128     /if ?>
129     </span><?cs
130    /if ?><?cs
131    var:change.date ?> 更新者:<?cs var:change.author ?>
132   </h3><?cs
133   if:len(change.fields) ?>
134    <ul class="changes"><?cs
135    each:field = change.fields ?>
136     <li><?cs if:name(field) == 'attachment' ?><strong>添付ファイル</strong> <em><?cs var:field.new ?></em> が登録されました<?cs
137     else ?><strong><?cs
138      alt:ticket.fields[name(field)].label ?><?cs var:name(field) ?><?cs
139      /alt ?></strong> が<?cs
140     if:field.old && field.new ?> <em><?cs
141      var:field.old ?></em> から <em><?cs var:field.new ?></em> に更新されました<?cs
142     elif:!field.old && field.new ?> <em><?cs var:field.new ?></em> に更新されました<?cs
143     elif:field.old && !field.new ?>削除されました<?cs
144     else ?>更新されました<?cs
145     /if ?><?cs /if ?>。</li>
146     <?cs
147    /each ?>
148    </ul><?cs
149   /if ?>
150   <div class="comment"><?cs var:change.comment ?></div>
151  </div>
152  </form><?cs
153  /each ?>
154 </div><?cs
155 /if ?>
156
157 <?cs if:trac.acl.TICKET_CHGPROP || trac.acl.TICKET_APPEND ?>
158 <form action="<?cs var:ticket.href ?>#preview" method="post">
159  <hr />
160  <h3><a name="edit" onfocus="document.getElementById('comment').focus()">追記/更新 #<?cs
161    var:ticket.id ?> (<?cs var:ticket.summary ?>)</a></h3>
162  <?cs if:trac.authname == "anonymous" ?>
163   <div class="field">
164    <label for="author">メールアドレスまたはユーザ名:</label><br />
165    <input type="text" id="author" name="author" size="40"
166      value="<?cs var:ticket.reporter_id ?>" /><br />
167   </div>
168  <?cs /if ?>
169  <div class="field">
170   <fieldset class="iefix">
171    <label for="comment">コメント (<a tabindex="42" href="<?cs
172      var:trac.href.wiki ?>/WikiFormatting">WikiFormatting</a> を使用できます):</label><br />
173    <p><textarea id="comment" name="comment" class="wikitext" rows="10" cols="78">
174 <?cs var:ticket.comment ?></textarea></p>
175   </fieldset><?cs
176   if ticket.comment_preview ?>
177    <fieldset id="preview">
178     <legend>コメントのプレビュー</legend>
179     <?cs var:ticket.comment_preview ?>
180    </fieldset><?cs
181   /if ?>
182  </div>
183
184  <?cs if:trac.acl.TICKET_CHGPROP ?><fieldset id="properties">
185   <legend>チケット属性を変更する</legend>
186   <table><tr>
187    <th><label for="summary">概要:</label></th>
188    <td class="fullrow" colspan="3"><input type="text" id="summary" name="summary" value="<?cs
189      var:ticket.summary ?>" size="70" /></td>
190    </tr><?cs
191    if:len(ticket.fields.type.options) ?>
192    <tr>
193     <th><label for="type">分類:</label></th>
194     <td><?cs
195      call:hdf_select(ticket.fields.type.options, 'type', ticket.type, 0) ?>
196     </td>
197    </tr><?cs
198    /if ?><?cs
199    if:trac.acl.TICKET_ADMIN ?><tr>
200     <th><label for="description">説明:</label></th>
201     <td class="fullrow" colspan="3">
202      <textarea id="description" name="description" class="wikitext" rows="10" cols="68">
203 <?cs var:ticket.description ?></textarea>
204     </td>
205    </tr><tr>
206     <th><label for="reporter">報告者:</label></th>
207     <td class="fullrow" colspan="3"><input type="text" value="<?cs
208       var:ticket.reporter ?>" id="reporter" name="reporter" size="70" /></td>
209    </tr><?cs
210    /if ?>
211   <tr><?cs set:num_fields = 0 ?><?cs
212   each:field = ticket.fields ?><?cs
213    if:!field.skip ?><?cs
214     set:num_fields = num_fields + 1 ?><?cs
215    /if ?><?cs
216   /each ?><?cs set:idx = 0 ?><?cs
217    each:field = ticket.fields ?><?cs
218     if:!field.skip ?><?cs set:fullrow = field.type == 'textarea' ?><?cs
219      if:fullrow && idx % 2 ?><?cs set:idx = idx + 1 ?><th class="col2"></th><td></td></tr><tr><?cs /if ?>
220      <th class="col<?cs var:idx % 2 + 1 ?>"><?cs
221        if:field.type != 'radio' ?><label for="<?cs var:name(field) ?>"><?cs
222        /if ?><?cs alt:field.label ?><?cs var:field.name ?><?cs /alt ?>:<?cs
223        if:field.type != 'radio' ?></label><?cs /if ?></th>
224      <td<?cs if:fullrow ?> colspan="3"<?cs /if ?>><?cs
225       if:field.type == 'text' ?><input type="text" id="<?cs
226         var:name(field) ?>" name="<?cs
227         var:name(field) ?>" value="<?cs var:ticket[name(field)] ?>" /><?cs
228       elif:field.type == 'select' ?><select id="<?cs
229         var:name(field) ?>" name="<?cs
230         var:name(field) ?>"><?cs
231         if:field.optional ?><option></option><?cs /if ?><?cs
232         each:option = field.options ?><option<?cs
233          if:option == ticket[name(field)] ?> selected="selected"<?cs /if ?>><?cs
234          var:option ?></option><?cs
235         /each ?></select><?cs
236       elif:field.type == 'checkbox' ?><input type="hidden" name="checkbox_<?cs
237         var:name(field) ?>" /><input type="checkbox" id="<?cs
238         var:name(field) ?>" name="<?cs
239         var:name(field) ?>" value="1"<?cs
240         if:ticket[name(field)] ?> checked="checked"<?cs /if ?> /><?cs
241       elif:field.type == 'textarea' ?><textarea id="<?cs
242         var:name(field) ?>" name="<?cs
243         var:name(field) ?>"<?cs
244         if:field.height ?> rows="<?cs var:field.height ?>"<?cs /if ?><?cs
245         if:field.width ?> cols="<?cs var:field.width ?>"<?cs /if ?>>
246 <?cs var:ticket[name(field)] ?></textarea><?cs
247       elif:field.type == 'radio' ?><?cs set:optidx = 0 ?><?cs
248        each:option = field.options ?><label><input type="radio" id="<?cs
249          var:name(field) ?>" name="<?cs
250          var:name(field) ?>" value="<?cs var:option ?>"<?cs
251          if:ticket[name(field)] == option ?> checked="checked"<?cs /if ?> /> <?cs
252          var:option ?></label> <?cs set:optidx = optidx + 1 ?><?cs
253         /each ?><?cs
254       /if ?></td><?cs
255      if:idx % 2 || fullrow ?><?cs
256       if:idx < num_fields - 1 ?></tr><tr><?cs
257       /if ?><?cs
258      elif:idx == num_fields - 1 ?><th class="col2"></th><td></td><?cs
259      /if ?><?cs set:idx = idx + #fullrow + 1 ?><?cs
260     /if ?><?cs
261    /each ?></tr>
262   </table>
263  </fieldset><?cs /if ?>
264
265  <?cs if:ticket.actions.accept || ticket.actions.reopen ||
266          ticket.actions.resolve || ticket.actions.reassign ?>
267  <fieldset id="action">
268   <legend>操作</legend><?cs
269   if:!ticket.action ?><?cs set:ticket.action = 'leave' ?><?cs
270   /if ?><?cs
271   def:action_radio(id) ?>
272    <input type="radio" id="<?cs var:id ?>" name="action" value="<?cs
273      var:id ?>"<?cs if:ticket.action == id ?> checked="checked"<?cs
274      /if ?> /><?cs
275   /def ?>
276   <?cs call:action_radio('leave') ?>
277    <label for="leave"><?cs var:ticket.status ?> のまま更新しない</label><br /><?cs
278   if:ticket.actions.accept ?><?cs
279    call:action_radio('accept') ?>
280    <label for="accept">チケットに着手する</label><br /><?cs
281   /if ?><?cs
282   if:ticket.actions.reopen ?><?cs
283    call:action_radio('reopen') ?>
284    <label for="reopen">解決を差し戻す</label><br /><?cs
285   /if ?><?cs
286   if:ticket.actions.resolve ?><?cs
287    call:action_radio('resolve') ?>
288    <label for="resolve">解決にする</label><?cs
289    if:len(ticket.fields.resolution.options) ?>
290     <label for="resolve_resolution">解決方法:</label>
291     <?cs call:hdf_select(ticket.fields.resolution.options, "resolve_resolution",
292                          ticket.resolve_resolution, 0) ?><br /><?cs
293    /if ?><?cs
294   /if ?><?cs
295   if:ticket.actions.reassign ?><?cs
296    call:action_radio('reassign') ?>
297    <label for="reassign">担当者の変更</label>
298    <label>新担当者:<?cs
299    if:len(ticket.fields.owner.options) ?><?cs
300     call:hdf_select(ticket.fields.owner.options, "reassign_owner",
301                     ticket.reassign_owner, 1) ?><?cs
302    else ?>
303     <input type="text" id="reassign_owner" name="reassign_owner" size="40" value="<?cs
304       var:ticket.reassign_owner ?>" /><?cs
305    /if ?></label><?cs
306   /if ?><?cs
307   if ticket.actions.resolve || ticket.actions.reassign ?>
308    <script type="text/javascript"><?cs
309     each:action = ticket.actions ?>
310      var <?cs var:name(action) ?> = document.getElementById("<?cs var:name(action) ?>");<?cs
311     /each ?>
312      var updateActionFields = function() {
313        <?cs if:ticket.actions.resolve ?> enableControl('resolve_resolution', resolve.checked);<?cs /if ?>
314        <?cs if:ticket.actions.reassign ?> enableControl('reassign_owner', reassign.checked);<?cs /if ?>
315      };
316      addEvent(window, 'load', updateActionFields);<?cs
317      each:action = ticket.actions ?>
318       addEvent(<?cs var:name(action) ?>, 'click', updateActionFields);<?cs
319      /each ?>
320    </script><?cs
321   /if ?>
322  </fieldset><?cs
323  else ?>
324   <input type="hidden" name="action" value="leave" /><?cs
325  /if ?>
326
327  <script type="text/javascript" src="<?cs
328    var:htdocs_location ?>js/wikitoolbar.js"></script>
329
330  <div class="buttons">
331   <input type="hidden" name="ts" value="<?cs var:ticket.ts ?>" />
332   <input type="hidden" name="replyto" value="<?cs var:ticket.replyto ?>" />
333   <input type="hidden" name="cnum" value="<?cs var:ticket.cnum ?>" />
334   <input type="submit" name="preview" value="プレビュー" accesskey="r" />&nbsp;
335   <input type="submit" value="更新" />
336  </div>
337 </form>
338 <?cs /if ?>
339
340  </div>
341  <script type="text/javascript">
342   addHeadingLinks(document.getElementById("searchable"), "$id への固定リンク");
343  </script>
344 </div>
345 <?cs include "footer.cs"?>
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。