Move BugsSite to Websites
[WebKit-https.git] / Websites / bugs.webkit.org / template / en / default / 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   function editAsComment()
51     {
52       switchToMode('edit');
53       has_edited = 1;
54     }
55   function undoEditAsComment()
56     {
57       switchToMode(prev_mode);
58     }
59   function redoEditAsComment()
60     {
61       switchToMode('edit');
62     }
63 [% IF patchviewerinstalled %]
64   function viewDiff()
65     {
66       switchToMode('diff');
67
68       // If we have not viewed as diff before, set the view diff frame URL
69       if (!has_viewed_as_diff) {
70         var viewDiffFrame = document.getElementById('viewDiffFrame');
71         viewDiffFrame.src =
72             'attachment.cgi?id=[% attachment.id %]&action=diff&headers=0';
73         has_viewed_as_diff = 1;
74       }
75     }
76 [% END %]
77   function viewRaw()
78     {
79       switchToMode('raw');
80     }
81
82   function switchToMode(mode)
83     {
84       if (mode == current_mode) {
85         alert('switched to same mode!  This should not happen.');
86         return;
87       }
88
89       // Switch out of current mode
90       if (current_mode == 'edit') {
91         hideElementById('editFrame');
92         hideElementById('undoEditButton');
93       } else if (current_mode == 'raw') {
94         hideElementById('viewFrame');
95 [% IF patchviewerinstalled %]
96         hideElementById('viewDiffButton');
97 [% END %]
98         hideElementById(has_edited ? 'redoEditButton' : 'editButton');
99         hideElementById('smallCommentFrame');
100       } else if (current_mode == 'diff') {
101 [% IF patchviewerinstalled %]
102         hideElementById('viewDiffFrame');
103 [% END %]
104         hideElementById('viewRawButton');
105         hideElementById(has_edited ? 'redoEditButton' : 'editButton');
106         hideElementById('smallCommentFrame');
107       }
108
109       // Switch into new mode
110       if (mode == 'edit') {
111         showElementById('editFrame');
112         showElementById('undoEditButton');
113       } else if (mode == 'raw') {
114         showElementById('viewFrame');
115 [% IF patchviewerinstalled %]
116         showElementById('viewDiffButton');
117 [% END %]
118         showElementById(has_edited ? 'redoEditButton' : 'editButton');
119         showElementById('smallCommentFrame');
120       } else if (mode == 'diff') {
121 [% IF patchviewerinstalled %]
122         showElementById('viewDiffFrame');
123 [% END %]
124         showElementById('viewRawButton');
125         showElementById(has_edited ? 'redoEditButton' : 'editButton');
126         showElementById('smallCommentFrame');
127       }
128
129       prev_mode = current_mode;
130       current_mode = mode;
131     }
132
133   function hideElementById(id)
134   {
135     var elm = document.getElementById(id);
136     if (elm) {
137       elm.style.display = 'none';
138     }
139   }
140
141   function showElementById(id, val)
142   {
143     var elm = document.getElementById(id);
144     if (elm) {
145       if (!val) val = 'inline';
146       elm.style.display = val;
147     }
148   }
149
150   function normalizeComments()
151   {
152     // Remove the unused comment field from the document so its contents
153     // do not get transmitted back to the server.
154
155     var small = document.getElementById('smallCommentFrame');
156     var big = document.getElementById('editFrame');
157     if ( (small) && (small.style.display == 'none') )
158     {
159       small.parentNode.removeChild(small);
160     }
161     if ( (big) && (big.style.display == 'none') )
162     {
163       big.parentNode.removeChild(big);
164     }
165   }
166   //-->
167 </script>
168
169 <form method="post" action="attachment.cgi" onsubmit="normalizeComments();">
170   <input type="hidden" name="id" value="[% attachment.id %]">
171   <input type="hidden" name="action" value="update">
172   <input type="hidden" name="contenttypemethod" value="manual">
173   <input type="hidden" name="delta_ts" value="[% attachment.modification_time FILTER html %]">
174   [% IF user.id %]
175     <input type="hidden" name="token" value="[% issue_hash_token([attachment.id, attachment.modification_time]) FILTER html %]">
176   [% END %]
177
178   <table class="attachment_info" width="100%">
179
180     <tr>
181       <td width="25%">
182         <small>
183         <b><label for="description">Description</label>:</b><br>
184           [% INCLUDE global/textarea.html.tmpl
185             id             = 'description'
186             name           = 'description'
187             minrows        = 3
188             cols           = 25
189             wrap           = 'soft'
190             defaultcontent = attachment.description
191           %]<br>
192
193         [% IF attachment.isurl %]
194             <input type="hidden" name="filename"
195                    value="[% attachment.filename FILTER html %]">
196             <input type="hidden" name="contenttypeentry"
197                    value="[% attachment.contenttype FILTER html %]">
198         [% ELSE %]
199           <b><label for="filename">Filename</label>:</b><br>
200             <input type="text" size="20" id="filename" name="filename"
201                    value="[% attachment.filename FILTER html %]"><br>
202           <b>Size:</b>
203           [% IF attachment.datasize %]
204             [%+ attachment.datasize FILTER unitconvert %]
205           [% ELSE %]
206             <em>deleted</em>
207           [% END %]<br>
208
209           <b><label for="contenttypeentry">MIME Type</label>:</b><br>
210             <input type="text" size="20"
211                    id="contenttypeentry" name="contenttypeentry"
212                    value="[% attachment.contenttype FILTER html %]"><br>
213
214           <input type="checkbox" id="ispatch" name="ispatch" value="1"
215                  [%+ 'checked="checked"' IF attachment.ispatch %]>
216           <label for="ispatch">patch</label>
217         [% END %]
218           <input type="checkbox" id="isobsolete" name="isobsolete" value="1"
219                  [%+ 'checked="checked"' IF attachment.isobsolete %]>
220           <label for="isobsolete">obsolete</label>
221           [% IF (Param("insidergroup") && user.in_group(Param("insidergroup"))) %]
222             <input type="checkbox" id="isprivate" name="isprivate" value="1"
223                    [% " checked" IF attachment.isprivate %]>
224             <label for="isprivate">private</label><br>
225           [% END %]
226           <br>
227         </small>
228
229         [% IF flag_types.size > 0 %]
230           [% PROCESS "flag/list.html.tmpl" bug_id = attachment.bug_id
231                                            attach_id = attachment.id %]<br>
232         [% END %]
233
234         <div id="smallCommentFrame">
235           <b><small><label for="comment">Comment</label> (on the
236           [%+ terms.bug %]):</small></b><br>
237             [% INCLUDE global/textarea.html.tmpl
238               id      = 'comment'
239               name    = 'comment'
240               minrows = 5
241               cols    = 25
242               wrap    = 'soft'
243             %]<br>
244         </div>
245
246         <input type="submit" value="Submit" id="update"><br><br>
247         <strong>Actions:</strong>
248         <a href="attachment.cgi?id=[% attachment.id %]">View</a>
249         [% IF attachment.ispatch && patchviewerinstalled %]
250          | <a href="attachment.cgi?id=[% attachment.id %]&amp;action=diff">Diff</a>
251         [% END %]
252         [% IF Param("allow_attachment_deletion")
253               && user.groups.admin
254               && attachment.datasize > 0 %]
255           | <a href="attachment.cgi?id=[% attachment.id %]&amp;action=delete">Delete</a>
256         [% END %]
257       </td>
258
259       [% IF !attachment.datasize %]
260         <td width="75%"><b>The content of this attachment has been deleted.</b></td>
261       [% ELSIF attachment.isurl %]
262         <td width="75%">
263           <a href="[% attachment.data FILTER html %]">
264             [% IF attachment.datasize < 120 %]
265               [% attachment.data FILTER html %]
266             [% ELSE %]
267               [% attachment.data FILTER truncate(80) FILTER html %]
268               &nbsp;...
269               [% attachment.data.match(".*(.{20})$").0 FILTER html %]
270             [% END %]
271           </a>
272         </td>
273       [% ELSIF !Param("allow_attachment_display") %]
274         <td id="view_disabled" width="50%">
275           <p><b>
276             The attachment is not viewable in your browser due to security
277             restrictions enabled by [% terms.Bugzilla %].
278           </b></p>
279           <p><b>
280             In order to view the attachment, you first have to
281             <a href="attachment.cgi?id=[% attachment.id %]">download it</a>.
282           </b></p>
283         </td>
284       [% ELSIF attachment.is_viewable %]
285         <td width="75%">
286           [% INCLUDE global/textarea.html.tmpl
287             id      = 'editFrame'
288             name    = 'comment'
289             style   = 'height: 400px; width: 100%; display: none'
290             minrows = 10
291             cols    = 80
292             wrap    = 'soft'
293             defaultcontent = (attachment.contenttype.match('^text\/')) ?
294                                attachment.data.replace('(.*\n|.+)', '>$1') : undef
295           %]
296           <iframe id="viewFrame" src="attachment.cgi?id=[% attachment.id %]" style="height: 400px; width: 100%;">
297             <b>You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
298             <a href="attachment.cgi?id=[% attachment.id %]">View the attachment on a separate page</a>.</b>
299           </iframe>
300           <script type="text/javascript">
301             <!--
302             if (typeof document.getElementById == "function") {
303 [% IF patchviewerinstalled %]
304               document.write('<iframe id="viewDiffFrame" style="height: 400px; width: 100%; display: none;"><\/iframe>');
305 [% END %]
306               document.write('<button type="button" id="editButton" onclick="editAsComment();">Edit Attachment As Comment<\/button>');
307               document.write('<button type="button" id="undoEditButton" onclick="undoEditAsComment();" style="display: none;">Undo Edit As Comment<\/button>');
308               document.write('<button type="button" id="redoEditButton" onclick="redoEditAsComment();" style="display: none;">Redo Edit As Comment<\/button>');
309 [% IF patchviewerinstalled %]
310               document.write('<button type="button" id="viewDiffButton" onclick="viewDiff();">View Attachment As Diff<\/button>');
311 [% END %]
312               document.write('<button type="button" id="viewRawButton" onclick="viewRaw();" style="display: none;">View Attachment As Raw<\/button>');
313             }
314             //-->
315           </script>
316         </td>
317       [% ELSE %]
318         <td id="noview" width="50%">
319           <p><b>
320             Attachment is not viewable in your browser because its MIME type 
321             ([% attachment.contenttype FILTER html %]) is not one that your browser is 
322             able to display.
323           </b></p>
324           <p><b>
325             <a href="attachment.cgi?id=[% attachment.id %]">Download the attachment</a>.
326           </b></p>
327         </td>
328       [% END %]
329
330     </tr>
331
332   </table>
333
334   Attachments on this [% terms.Bug %]:
335   [% FOREACH a = attachments %]
336     [% IF a == attachment.id %]
337       [%+ a %]
338     [% ELSE %]
339       <a href="attachment.cgi?id=[% a %]&amp;action=edit">[% a %]</a>
340     [% END %]
341     [% " |" UNLESS loop.last() %]
342   [% END %]
343
344 </form>
345
346 <br>
347
348 [% PROCESS global/footer.html.tmpl %]