Make the status bubble iframe big enough to show all the bubbles
[WebKit-https.git] / Websites / bugs.webkit.org / template / en / custom / attachment / edit.html.tmpl
1 [%# The contents of this file are subject to the Mozilla Public
2   # License Version 1.1 (the "License"); you may not use this file
3   # except in compliance with the License. You may obtain a copy of
4   # the License at http://www.mozilla.org/MPL/
5   #
6   # Software distributed under the License is distributed on an "AS
7   # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
8   # implied. See the License for the specific language governing
9   # rights and limitations under the License.
10   #
11   # The Original Code is the Bugzilla Bug Tracking System.
12   #
13   # The Initial Developer of the Original Code is Netscape Communications
14   # Corporation. Portions created by Netscape are
15   # Copyright (C) 1998 Netscape Communications Corporation. All
16   # Rights Reserved.
17   #
18   # Contributor(s): Myk Melez <myk@mozilla.org>
19   #                 Frédéric Buclin <LpSolit@gmail.com>
20   #%]
21
22 [% PROCESS global/variables.none.tmpl %]
23
24 [%# Define strings that will serve as the title and header of this page %]
25 [% title = BLOCK %]
26   Attachment [% attachment.id %] Details for [% terms.Bug %] [%+ attachment.bug_id %]
27 [% END %]
28 [% header = BLOCK %]
29   Attachment [% attachment.id %] Details for
30   [%+ "$terms.Bug ${attachment.bug_id}" FILTER bug_link(attachment.bug_id) FILTER none %]
31 [% END %]
32 [% subheader = BLOCK %][% bugsummary FILTER html %][% END %]
33
34 [% PROCESS global/header.html.tmpl
35   title = title
36   header = header
37   subheader = subheader
38   doc_section = "attachments.html"
39 %]
40
41 [%# No need to display the Diff button and iframe if the attachment is not a patch. %]
42 [% patchviewerinstalled = (patchviewerinstalled && attachment.ispatch) %]
43
44 <script type="text/javascript">
45   <!--
46   var prev_mode = 'raw';
47   var current_mode = 'raw';
48   var has_edited = 0;
49   var has_viewed_as_diff = 0;
50 // if WEBKIT_CHANGES
51   var viewing_formatted_diff = false;
52 // endif WEBKIT_CHANGES
53   function editAsComment()
54     {
55       switchToMode('edit');
56       has_edited = 1;
57     }
58   function undoEditAsComment()
59     {
60       switchToMode(prev_mode);
61     }
62   function redoEditAsComment()
63     {
64       switchToMode('edit');
65     }
66 // if WEBKIT_CHANGES
67   function viewPrettyPatch()
68     {
69       viewing_formatted_diff = !viewing_formatted_diff;
70       var src = "attachment.cgi?id=[% attachment.id %]";
71       var buttonText = "View Formatted Diff";
72       if (viewing_formatted_diff)
73       {
74         src += "&action=prettypatch"
75         buttonText = "View Plain Diff";
76       }
77
78       document.getElementById('viewFrame').src = src;
79       document.getElementById('viewPrettyPatchButton').innerHTML = buttonText;
80     }
81 // endif WEBKIT_CHANGES
82 [% IF patchviewerinstalled %]
83   function viewDiff()
84     {
85       switchToMode('diff');
86
87       // If we have not viewed as diff before, set the view diff frame URL
88       if (!has_viewed_as_diff) {
89         var viewDiffFrame = document.getElementById('viewDiffFrame');
90         viewDiffFrame.src =
91             'attachment.cgi?id=[% attachment.id %]&action=diff&headers=0';
92         has_viewed_as_diff = 1;
93       }
94     }
95 [% END %]
96   function viewRaw()
97     {
98       switchToMode('raw');
99     }
100
101   function switchToMode(mode)
102     {
103       if (mode == current_mode) {
104         alert('switched to same mode!  This should not happen.');
105         return;
106       }
107
108       // Switch out of current mode
109       if (current_mode == 'edit') {
110         hideElementById('editFrame');
111         hideElementById('undoEditButton');
112       } else if (current_mode == 'raw') {
113         hideElementById('viewFrame');
114 [%# if WEBKIT_CHANGES %]
115         hideElementById('viewPrettyPatchButton');
116 [%# endif // WEBKIT_CHANGES %]
117 [% IF patchviewerinstalled %]
118         hideElementById('viewDiffButton');
119 [% END %]
120         hideElementById(has_edited ? 'redoEditButton' : 'editButton');
121         hideElementById('smallCommentFrame');
122       } else if (current_mode == 'diff') {
123 [% IF patchviewerinstalled %]
124         hideElementById('viewDiffFrame');
125 [% END %]
126         hideElementById('viewRawButton');
127         hideElementById(has_edited ? 'redoEditButton' : 'editButton');
128         hideElementById('smallCommentFrame');
129       }
130
131       // Switch into new mode
132       if (mode == 'edit') {
133         showElementById('editFrame');
134         showElementById('undoEditButton');
135       } else if (mode == 'raw') {
136         showElementById('viewFrame');
137 [%# if WEBKIT_CHANGES %]
138         showElementById('viewPrettyPatchButton');
139 [%# endif // WEBKIT_CHANGES %]
140 [% IF patchviewerinstalled %]
141         showElementById('viewDiffButton');
142 [% END %]
143         showElementById(has_edited ? 'redoEditButton' : 'editButton');
144         showElementById('smallCommentFrame');
145       } else if (mode == 'diff') {
146 [% IF patchviewerinstalled %]
147         showElementById('viewDiffFrame');
148 [% END %]
149         showElementById('viewRawButton');
150         showElementById(has_edited ? 'redoEditButton' : 'editButton');
151         showElementById('smallCommentFrame');
152       }
153
154       prev_mode = current_mode;
155       current_mode = mode;
156     }
157
158   function hideElementById(id)
159   {
160     var elm = document.getElementById(id);
161     if (elm) {
162       elm.style.display = 'none';
163     }
164   }
165
166   function showElementById(id, val)
167   {
168     var elm = document.getElementById(id);
169     if (elm) {
170       if (!val) val = 'inline';
171       elm.style.display = val;
172     }
173   }
174
175   function normalizeComments()
176   {
177     // Remove the unused comment field from the document so its contents
178     // do not get transmitted back to the server.
179
180     var small = document.getElementById('smallCommentFrame');
181     var big = document.getElementById('editFrame');
182     if ( (small) && (small.style.display == 'none') )
183     {
184       small.parentNode.removeChild(small);
185     }
186     if ( (big) && (big.style.display == 'none') )
187     {
188       big.parentNode.removeChild(big);
189     }
190   }
191   //-->
192 </script>
193
194 <form method="post" action="attachment.cgi" onsubmit="normalizeComments();">
195   <input type="hidden" name="id" value="[% attachment.id %]">
196   <input type="hidden" name="action" value="update">
197   <input type="hidden" name="contenttypemethod" value="manual">
198   <input type="hidden" name="delta_ts" value="[% attachment.modification_time FILTER html %]">
199   [% IF user.id %]
200     <input type="hidden" name="token" value="[% issue_hash_token([attachment.id, attachment.modification_time]) FILTER html %]">
201   [% END %]
202
203   <table class="attachment_info" width="100%">
204
205     <tr>
206       <td width="25%">
207         <small>
208         <b><label for="description">Description</label>:</b><br>
209           [% INCLUDE global/textarea.html.tmpl
210             id             = 'description'
211             name           = 'description'
212             minrows        = 3
213             cols           = 25
214             wrap           = 'soft'
215             defaultcontent = attachment.description
216           %]<br>
217
218         [% IF attachment.isurl %]
219             <input type="hidden" name="filename"
220                    value="[% attachment.filename FILTER html %]">
221             <input type="hidden" name="contenttypeentry"
222                    value="[% attachment.contenttype FILTER html %]">
223         [% ELSE %]
224           <b><label for="filename">Filename</label>:</b><br>
225             <input type="text" size="20" id="filename" name="filename"
226                    value="[% attachment.filename FILTER html %]"><br>
227           <b>Size:</b>
228           [% IF attachment.datasize %]
229             [%+ attachment.datasize FILTER unitconvert %]
230           [% ELSE %]
231             <em>deleted</em>
232           [% END %]<br>
233
234           <b><label for="contenttypeentry">MIME Type</label>:</b><br>
235             <input type="text" size="20"
236                    id="contenttypeentry" name="contenttypeentry"
237                    value="[% attachment.contenttype FILTER html %]"><br>
238
239           <input type="checkbox" id="ispatch" name="ispatch" value="1"
240                  [%+ 'checked="checked"' IF attachment.ispatch %]>
241           <label for="ispatch">patch</label>
242         [% END %]
243           <input type="checkbox" id="isobsolete" name="isobsolete" value="1"
244                  [%+ 'checked="checked"' IF attachment.isobsolete %]>
245           <label for="isobsolete">obsolete</label>
246           [% IF (Param("insidergroup") && user.in_group(Param("insidergroup"))) %]
247             <input type="checkbox" id="isprivate" name="isprivate" value="1"
248                    [% " checked" IF attachment.isprivate %]>
249             <label for="isprivate">private</label><br>
250           [% END %]
251           <br>
252         </small>
253
254         [% IF flag_types.size > 0 %]
255           [% PROCESS "flag/list.html.tmpl" bug_id = attachment.bug_id
256                                            attach_id = attachment.id %]<br>
257         [% END %]
258
259 [%# if WEBKIT_CHANGES %]
260         [% IF attachment.ispatch %]
261         <b><small>Bot Status:</small></b>
262
263         <div class="statusBubble">
264           <iframe src="https://webkit-commit-queue.appspot.com/status-bubble/[% attachment.id %]"
265                   style="width: 480px; height: 40px; border: none;" scrolling="no">
266           </iframe>
267         </div>
268         <br>
269         [% END %]
270 [%# endif // WEBKIT_CHANGES %]
271
272         <div id="smallCommentFrame">
273           <b><small><label for="comment">Comment</label> (on the
274           [%+ terms.bug %]):</small></b><br>
275             [% INCLUDE global/textarea.html.tmpl
276               id      = 'comment'
277               name    = 'comment'
278               minrows = 5
279               cols    = 25
280               wrap    = 'soft'
281             %]<br>
282         </div>
283
284         <input type="submit" value="Submit" id="update"><br><br>
285         <strong>Actions:</strong>
286         <a href="attachment.cgi?id=[% attachment.id %]">View</a>
287 [%# if WEBKIT_CHANGES %]
288         [% IF attachment.ispatch %]
289          | <a href="attachment.cgi?id=[% attachment.id %]&amp;action=prettypatch">Formatted Diff</a>
290         [% END %]
291 [%# endif // WEBKIT_CHANGES %]
292         [% IF attachment.ispatch && patchviewerinstalled %]
293          | <a href="attachment.cgi?id=[% attachment.id %]&amp;action=diff">Diff</a>
294         [% END %]
295         [% IF Param("allow_attachment_deletion")
296               && user.groups.admin
297               && attachment.datasize > 0 %]
298           | <a href="attachment.cgi?id=[% attachment.id %]&amp;action=delete">Delete</a>
299         [% END %]
300       </td>
301
302       [% IF !attachment.datasize %]
303         <td width="75%"><b>The content of this attachment has been deleted.</b></td>
304       [% ELSIF attachment.isurl %]
305         <td width="75%">
306           <a href="[% attachment.data FILTER html %]">
307             [% IF attachment.datasize < 120 %]
308               [% attachment.data FILTER html %]
309             [% ELSE %]
310               [% attachment.data FILTER truncate(80) FILTER html %]
311               &nbsp;...
312               [% attachment.data.match(".*(.{20})$").0 FILTER html %]
313             [% END %]
314           </a>
315         </td>
316       [% ELSIF !Param("allow_attachment_display") %]
317         <td id="view_disabled" width="50%">
318           <p><b>
319             The attachment is not viewable in your browser due to security
320             restrictions enabled by [% terms.Bugzilla %].
321           </b></p>
322           <p><b>
323             In order to view the attachment, you first have to
324             <a href="attachment.cgi?id=[% attachment.id %]">download it</a>.
325           </b></p>
326         </td>
327       [% ELSIF attachment.is_viewable %]
328         <td width="75%">
329           [% INCLUDE global/textarea.html.tmpl
330             id      = 'editFrame'
331             name    = 'comment'
332             style   = 'height: 400px; width: 100%; display: none'
333             minrows = 10
334             cols    = 80
335             wrap    = 'soft'
336             defaultcontent = (attachment.contenttype.match('^text\/')) ?
337                                attachment.data.replace('(.*\n|.+)', '>$1') : undef
338           %]
339           <iframe id="viewFrame" src="attachment.cgi?id=[% attachment.id %]" style="height: 400px; width: 100%;">
340             <b>You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
341             <a href="attachment.cgi?id=[% attachment.id %]">View the attachment on a separate page</a>.</b>
342           </iframe>
343           <script type="text/javascript">
344             <!--
345             if (typeof document.getElementById == "function") {
346 [% IF patchviewerinstalled %]
347               document.write('<iframe id="viewDiffFrame" style="height: 400px; width: 100%; display: none;"><\/iframe>');
348 [% END %]
349 [%# if WEBKIT_CHANGES %]
350 [% IF attachment.ispatch %]
351               document.write('<button type="button" id="viewPrettyPatchButton" onclick="viewPrettyPatch();">View Formatted Diff<\/button>');
352 [% END %]
353 [%# endif // WEBKIT_CHANGES %]
354               document.write('<button type="button" id="editButton" onclick="editAsComment();">Edit Attachment As Comment<\/button>');
355               document.write('<button type="button" id="undoEditButton" onclick="undoEditAsComment();" style="display: none;">Undo Edit As Comment<\/button>');
356               document.write('<button type="button" id="redoEditButton" onclick="redoEditAsComment();" style="display: none;">Redo Edit As Comment<\/button>');
357 [% IF patchviewerinstalled %]
358               document.write('<button type="button" id="viewDiffButton" onclick="viewDiff();">View Attachment As Diff<\/button>');
359 [% END %]
360               document.write('<button type="button" id="viewRawButton" onclick="viewRaw();" style="display: none;">View Attachment As Raw<\/button>');
361             }
362             //-->
363           </script>
364         </td>
365       [% ELSE %]
366         <td id="noview" width="50%">
367           <p><b>
368             Attachment is not viewable in your browser because its MIME type 
369             ([% attachment.contenttype FILTER html %]) is not one that your browser is 
370             able to display.
371           </b></p>
372           <p><b>
373             <a href="attachment.cgi?id=[% attachment.id %]">Download the attachment</a>.
374           </b></p>
375         </td>
376       [% END %]
377
378     </tr>
379
380   </table>
381
382   Attachments on this [% terms.Bug %]:
383   [% FOREACH a = attachments %]
384     [% IF a == attachment.id %]
385       [%+ a %]
386     [% ELSE %]
387       <a href="attachment.cgi?id=[% a %]&amp;action=edit">[% a %]</a>
388     [% END %]
389     [% " |" UNLESS loop.last() %]
390   [% END %]
391
392 </form>
393
394 <br>
395
396 [% PROCESS global/footer.html.tmpl %]