Make old EWS bubbles less opaque to disambiguate two set of 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: 380px; height: 40px; border: none; opacity: 0.3;" scrolling="no">
266           </iframe>
267           <iframe src="https://webkit-queues.appspot.com/status-bubble/[% attachment.id %]"
268                   style="width: 380px; height: 40px; border: none;" scrolling="no">
269           </iframe>
270         </div>
271         <br>
272         [% END %]
273 [%# endif // WEBKIT_CHANGES %]
274
275         <div id="smallCommentFrame">
276           <b><small><label for="comment">Comment</label> (on the
277           [%+ terms.bug %]):</small></b><br>
278             [% INCLUDE global/textarea.html.tmpl
279               id      = 'comment'
280               name    = 'comment'
281               minrows = 5
282               cols    = 25
283               wrap    = 'soft'
284             %]<br>
285         </div>
286
287         <input type="submit" value="Submit" id="update"><br><br>
288         <strong>Actions:</strong>
289         <a href="attachment.cgi?id=[% attachment.id %]">View</a>
290 [%# if WEBKIT_CHANGES %]
291         [% IF attachment.ispatch %]
292          | <a href="attachment.cgi?id=[% attachment.id %]&amp;action=prettypatch">Formatted Diff</a>
293         [% END %]
294 [%# endif // WEBKIT_CHANGES %]
295         [% IF attachment.ispatch && patchviewerinstalled %]
296          | <a href="attachment.cgi?id=[% attachment.id %]&amp;action=diff">Diff</a>
297         [% END %]
298         [% IF Param("allow_attachment_deletion")
299               && user.groups.admin
300               && attachment.datasize > 0 %]
301           | <a href="attachment.cgi?id=[% attachment.id %]&amp;action=delete">Delete</a>
302         [% END %]
303       </td>
304
305       [% IF !attachment.datasize %]
306         <td width="75%"><b>The content of this attachment has been deleted.</b></td>
307       [% ELSIF attachment.isurl %]
308         <td width="75%">
309           <a href="[% attachment.data FILTER html %]">
310             [% IF attachment.datasize < 120 %]
311               [% attachment.data FILTER html %]
312             [% ELSE %]
313               [% attachment.data FILTER truncate(80) FILTER html %]
314               &nbsp;...
315               [% attachment.data.match(".*(.{20})$").0 FILTER html %]
316             [% END %]
317           </a>
318         </td>
319       [% ELSIF !Param("allow_attachment_display") %]
320         <td id="view_disabled" width="50%">
321           <p><b>
322             The attachment is not viewable in your browser due to security
323             restrictions enabled by [% terms.Bugzilla %].
324           </b></p>
325           <p><b>
326             In order to view the attachment, you first have to
327             <a href="attachment.cgi?id=[% attachment.id %]">download it</a>.
328           </b></p>
329         </td>
330       [% ELSIF attachment.is_viewable %]
331         <td width="75%">
332           [% INCLUDE global/textarea.html.tmpl
333             id      = 'editFrame'
334             name    = 'comment'
335             style   = 'height: 400px; width: 100%; display: none'
336             minrows = 10
337             cols    = 80
338             wrap    = 'soft'
339             defaultcontent = (attachment.contenttype.match('^text\/')) ?
340                                attachment.data.replace('(.*\n|.+)', '>$1') : undef
341           %]
342           <iframe id="viewFrame" src="attachment.cgi?id=[% attachment.id %]" style="height: 400px; width: 100%;">
343             <b>You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
344             <a href="attachment.cgi?id=[% attachment.id %]">View the attachment on a separate page</a>.</b>
345           </iframe>
346           <script type="text/javascript">
347             <!--
348             if (typeof document.getElementById == "function") {
349 [% IF patchviewerinstalled %]
350               document.write('<iframe id="viewDiffFrame" style="height: 400px; width: 100%; display: none;"><\/iframe>');
351 [% END %]
352 [%# if WEBKIT_CHANGES %]
353 [% IF attachment.ispatch %]
354               document.write('<button type="button" id="viewPrettyPatchButton" onclick="viewPrettyPatch();">View Formatted Diff<\/button>');
355 [% END %]
356 [%# endif // WEBKIT_CHANGES %]
357               document.write('<button type="button" id="editButton" onclick="editAsComment();">Edit Attachment As Comment<\/button>');
358               document.write('<button type="button" id="undoEditButton" onclick="undoEditAsComment();" style="display: none;">Undo Edit As Comment<\/button>');
359               document.write('<button type="button" id="redoEditButton" onclick="redoEditAsComment();" style="display: none;">Redo Edit As Comment<\/button>');
360 [% IF patchviewerinstalled %]
361               document.write('<button type="button" id="viewDiffButton" onclick="viewDiff();">View Attachment As Diff<\/button>');
362 [% END %]
363               document.write('<button type="button" id="viewRawButton" onclick="viewRaw();" style="display: none;">View Attachment As Raw<\/button>');
364             }
365             //-->
366           </script>
367         </td>
368       [% ELSE %]
369         <td id="noview" width="50%">
370           <p><b>
371             Attachment is not viewable in your browser because its MIME type 
372             ([% attachment.contenttype FILTER html %]) is not one that your browser is 
373             able to display.
374           </b></p>
375           <p><b>
376             <a href="attachment.cgi?id=[% attachment.id %]">Download the attachment</a>.
377           </b></p>
378         </td>
379       [% END %]
380
381     </tr>
382
383   </table>
384
385   Attachments on this [% terms.Bug %]:
386   [% FOREACH a = attachments %]
387     [% IF a == attachment.id %]
388       [%+ a %]
389     [% ELSE %]
390       <a href="attachment.cgi?id=[% a %]&amp;action=edit">[% a %]</a>
391     [% END %]
392     [% " |" UNLESS loop.last() %]
393   [% END %]
394
395 </form>
396
397 <br>
398
399 [% PROCESS global/footer.html.tmpl %]