| [%# The contents of this file are subject to the Mozilla Public |
| # License Version 1.1 (the "License"); you may not use this file |
| # except in compliance with the License. You may obtain a copy of |
| # the License at http://www.mozilla.org/MPL/ |
| # |
| # Software distributed under the License is distributed on an "AS |
| # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or |
| # implied. See the License for the specific language governing |
| # rights and limitations under the License. |
| # |
| # The Original Code is the Bugzilla Bug Tracking System. |
| # |
| # The Initial Developer of the Original Code is Netscape Communications |
| # Corporation. Portions created by Netscape are |
| # Copyright (C) 1998 Netscape Communications Corporation. All |
| # Rights Reserved. |
| # |
| # Contributor(s): Myk Melez <myk@mozilla.org> |
| # Frédéric Buclin <LpSolit@gmail.com> |
| # Guy Pyrzak <guy.pyrzak@gmail.com> |
| #%] |
| |
| [% PROCESS global/variables.none.tmpl %] |
| |
| [%# Define strings that will serve as the title and header of this page %] |
| [% title = BLOCK %] |
| Attachment [% attachment.id %] Details for [% terms.Bug %] [%+ attachment.bug_id %] |
| [% END %] |
| [% header = BLOCK %] |
| Attachment [% attachment.id %] Details for |
| [%+ "$terms.Bug ${attachment.bug_id}" FILTER bug_link(attachment.bug_id) FILTER none %] |
| [% END %] |
| [% subheader = BLOCK %][% attachment.bug.short_desc FILTER html %][% END %] |
| |
| [% PROCESS global/header.html.tmpl |
| title = title |
| header = header |
| subheader = subheader |
| doc_section = "attachments.html" |
| javascript_urls = ['js/attachment.js', 'js/field.js'] |
| style_urls = ['skins/standard/attachment.css'] |
| yui = [ 'autocomplete' ] |
| bodyclasses = "no_javascript" |
| %] |
| |
| [%# No need to display the Diff button and iframe if the attachment is not a patch. %] |
| [% use_patchviewer = (feature_enabled('patch_viewer') && attachment.ispatch) %] |
| [% can_edit = attachment.validate_can_edit %] |
| [% editable_or_hide = can_edit ? "" : " bz_hidden_option" %] |
| |
| <form method="post" action="attachment.cgi" onsubmit="normalizeComments();"> |
| <input type="hidden" name="id" value="[% attachment.id %]"> |
| <input type="hidden" name="action" value="update"> |
| <input type="hidden" name="contenttypemethod" value="manual"> |
| <input type="hidden" name="delta_ts" value="[% attachment.modification_time FILTER html %]"> |
| [% IF user.id %] |
| <input type="hidden" name="token" value="[% issue_hash_token([attachment.id, attachment.modification_time]) FILTER html %]"> |
| [% END %] |
| |
| <div id="attachment_info" class="attachment_info [% IF can_edit %] edit[% ELSE %] read[% END%]"> |
| <div id="attachment_attributes"> |
| <div id="attachment_information_read_only" class="[% "bz_private" IF attachment.isprivate %]"> |
| <div class="title"> |
| [% "[patch]" IF attachment.ispatch%] |
| <span class="[% "bz_obsolete" IF attachment.isobsolete %]" title="[% "obsolete" IF attachment.isobsolete %]"> |
| [% attachment.description FILTER html %] |
| </span> |
| [% IF can_edit %] |
| <span class="bz_edit">(<a href="javascript:toggle_attachment_details_visibility()">edit details</a>)</span> |
| [% END %] |
| </div> |
| <div class="details"> |
| [% attachment.filename FILTER html %] ([% attachment.contenttype FILTER html %]), |
| [% IF attachment.datasize %] |
| [%+ attachment.datasize FILTER unitconvert %] |
| [% ELSE %] |
| <em>deleted</em> |
| [% END %], created by [%+ INCLUDE global/user.html.tmpl who = attachment.attacher %] |
| [% IF attachment.isprivate %]; |
| <span class="bz_private">only visible to <strong>[% Param('insidergroup') FILTER html %]</strong> members</span> |
| [% END %] |
| </div> |
| </div> |
| <div id="attachment_information_edit"> |
| <span class="bz_hide"> |
| (<a href="javascript:toggle_attachment_details_visibility();">hide</a>) |
| </span> |
| <div id="attachment_description"> |
| <label for="description">Description:</label> |
| [% INCLUDE global/textarea.html.tmpl |
| id = 'description' |
| name = 'description' |
| minrows = 3 |
| cols = 25 |
| wrap = 'soft' |
| classes = 'block' _ editable_or_hide |
| defaultcontent = attachment.description |
| %] |
| </div> |
| |
| <div id="attachment_filename"> |
| <label for="filename">Filename:</label> |
| <input type="text" size="20" class="text block[% editable_or_hide %]" |
| id="filename" name="filename" |
| value="[% attachment.filename FILTER html %]"> |
| </div> |
| |
| <div id="attachment_mimetype"> |
| <label for="contenttypeentry">MIME Type:</label> |
| <input type="text" size="20" class="text block[% editable_or_hide %]" |
| id="contenttypeentry" name="contenttypeentry" |
| value="[% attachment.contenttype FILTER html %]"> |
| </div> |
| |
| <div id="attachment_creator"> |
| <span class="label">Creator:</span> |
| [%+ INCLUDE global/user.html.tmpl who = attachment.attacher %] |
| </div> |
| |
| <div id="attachment_size"> |
| <span class="label">Size:</span> |
| [% IF attachment.datasize %] |
| [%+ attachment.datasize FILTER unitconvert %] |
| [% ELSE %] |
| <em>deleted</em> |
| [% END %] |
| </div> |
| |
| <div id="attachment_ispatch"> |
| <input type="checkbox" id="ispatch" name="ispatch" value="1" |
| [%+ 'checked="checked"' IF attachment.ispatch %]> |
| <label for="ispatch">patch</label> |
| </div> |
| |
| <div class="readonly"> |
| <div class="checkboxes"> |
| <div id="attachment_isobsolete"> |
| <input type="checkbox" id="isobsolete" name="isobsolete" value="1" |
| [%+ 'checked="checked"' IF attachment.isobsolete %]> |
| <label for="isobsolete">obsolete</label> |
| </div> |
| |
| [% IF user.is_insider %] |
| <div id="attachment_isprivate"> |
| <input type="checkbox" id="isprivate" name="isprivate" value="1" |
| [%+ 'checked="checked"' IF attachment.isprivate %]> |
| [% IF can_edit %] |
| <label for="isprivate">private (only visible to |
| <strong>[% Param('insidergroup') FILTER html %]</strong>) |
| </label> |
| [% ELSE %] |
| <span class="label">Is Private:</span> |
| [%+ attachment.isprivate ? "yes" : "no" %] |
| [% END %] |
| </div> |
| [% END %] |
| </div> |
| </div> |
| </div> |
| |
| <div id="attachment_view_window"> |
| [% IF !attachment.datasize %] |
| <div><b>The content of this attachment has been deleted.</b></div> |
| [% ELSIF !Param("allow_attachment_display") %] |
| <div id="view_disabled"> |
| <p><b> |
| The attachment is not viewable in your browser due to security |
| restrictions enabled by your [% terms.Bugzilla %] administrator. |
| </b></p> |
| <p><b> |
| In order to view the attachment, you first have to |
| <a href="attachment.cgi?id=[% attachment.id %]">download it</a>. |
| </b></p> |
| </div> |
| [% ELSIF attachment.is_viewable %] |
| <div> |
| [% INCLUDE global/textarea.html.tmpl |
| id = 'editFrame' |
| name = 'comment' |
| classes = 'bz_default_hidden' |
| minrows = 10 |
| cols = 80 |
| wrap = 'soft' |
| disabled = 'disabled' |
| defaultcontent = (attachment.contenttype.match('^text\/')) ? |
| attachment.data.replace('(.*\n|.+)', '>$1') : undef |
| %] |
| [% IF attachment.contenttype == 'text/plain' AND is_safe_url(attachment.data) %] |
| <p> |
| <a href="[% attachment.data FILTER html %]"> |
| [% IF attachment.datasize < 120 %] |
| [% attachment.data FILTER html %] |
| [% ELSE %] |
| [% attachment.data FILTER truncate(80) FILTER html %] |
| ... |
| [% attachment.data.match('.*(.{20})$').0 FILTER html %] |
| [% END %] |
| </a> |
| </p> |
| [% ELSIF attachment.contenttype == "text/html" %] |
| [%# For security reasons (clickjacking, embedded scripts), we never |
| # render HTML pages from here. The source code is displayed instead. %] |
| [% INCLUDE global/textarea.html.tmpl |
| id = 'viewFrame' |
| minrows = 10 |
| cols = 80 |
| defaultcontent = attachment.data |
| readonly = 'readonly' |
| %] |
| [% ELSE %] |
| <iframe id="viewFrame" src="attachment.cgi?id=[% attachment.id %]"> |
| <b>You cannot view the attachment while viewing its details because your browser does not support IFRAMEs. |
| <a href="attachment.cgi?id=[% attachment.id %]">View the attachment on a separate page</a>.</b> |
| </iframe> |
| [% END %] |
| <script type="text/javascript"> |
| <!-- |
| var patchviewerinstalled = 0; |
| var attachment_id = [% attachment.id %]; |
| if (typeof document.getElementById == "function") { |
| [% IF use_patchviewer %] |
| var patchviewerinstalled = 1; |
| document.write('<iframe id="viewDiffFrame" class="bz_default_hidden"><\/iframe>'); |
| [% END %] |
| [% IF user.id %] |
| document.write('<button type="button" id="editButton" onclick="editAsComment(patchviewerinstalled);">Edit Attachment As Comment<\/button>'); |
| document.write('<button type="button" id="undoEditButton" onclick="undoEditAsComment(patchviewerinstalled);" class="bz_default_hidden">Undo Edit As Comment<\/button>'); |
| document.write('<button type="button" id="redoEditButton" onclick="redoEditAsComment(patchviewerinstalled);" class="bz_default_hidden">Redo Edit As Comment<\/button>'); |
| var editFrame = document.getElementById('editFrame'); |
| if (editFrame) { |
| editFrame.disabled = false; |
| } |
| [% END %] |
| [% IF use_patchviewer %] |
| document.write('<button type="button" id="viewDiffButton" onclick="viewDiff(attachment_id, patchviewerinstalled);">View Attachment As Diff<\/button>'); |
| [% END %] |
| document.write('<button type="button" id="viewRawButton" onclick="viewRaw(patchviewerinstalled);" class="bz_default_hidden">View Attachment As Raw<\/button>'); |
| } |
| //--> |
| </script> |
| </div> |
| [% ELSE %] |
| <div id="noview"> |
| <p><b> |
| Attachment is not viewable in your browser because its MIME type |
| ([% attachment.contenttype FILTER html %]) is not one that your browser is |
| able to display. |
| </b></p> |
| <p><b> |
| <a href="attachment.cgi?id=[% attachment.id %]">Download the attachment</a>. |
| </b></p> |
| </div> |
| [% END %] |
| </div> |
| <div id="attachment_comments_and_flags"> |
| [% IF user.id %] |
| <div id="smallCommentFrame" > |
| <label for="comment">Comment (on the [% terms.bug %]):</label> |
| [% classNames = 'block' %] |
| [% classNames = "$classes bz_private" IF attachment.isprivate %] |
| [% INCLUDE global/textarea.html.tmpl |
| id = 'comment' |
| name = 'comment' |
| minrows = 10 |
| cols = 80 |
| wrap = 'soft' |
| classes = classNames |
| %] |
| </div> |
| [% END %] |
| <div id="attachment_flags"> |
| [% IF attachment.flag_types.size > 0 %] |
| [% PROCESS "flag/list.html.tmpl" flag_types = attachment.flag_types |
| read_only_flags = !can_edit |
| %] |
| |
| [% END %] |
| </div> |
| |
| [% Hook.process('form_before_submit') %] |
| |
| [% IF user.id %] |
| <div id="update_container"> |
| <input type="submit" value="Submit" id="update"> |
| </div> |
| [% END %] |
| </div> |
| </div> |
| </div> |
| </form> |
| |
| <div id="attachment_actions"> |
| <span class="label">Actions:</span> |
| <a href="attachment.cgi?id=[% attachment.id %]">View</a> |
| [% IF use_patchviewer %] |
| | <a href="attachment.cgi?id=[% attachment.id %]&action=diff">Diff</a> |
| [% END %] |
| [% IF Param("allow_attachment_deletion") |
| && user.in_group('admin') |
| && attachment.datasize > 0 %] |
| | <a href="attachment.cgi?id=[% attachment.id %]&action=delete">Delete</a> |
| [% END %] |
| [% Hook.process('action') %] |
| </div> |
| |
| <div id="attachment_list"> |
| Attachments on [% "$terms.bug ${attachment.bug_id}" FILTER bug_link(attachment.bug_id) FILTER none %]: |
| [% FOREACH a = attachments %] |
| [% IF a == attachment.id %] |
| [%+ a %] |
| [% ELSE %] |
| <a href="attachment.cgi?id=[% a %]&action=edit">[% a %]</a> |
| [% END %] |
| [% " |" UNLESS loop.last() %] |
| [% END %] |
| </div> |
| [% IF can_edit %] |
| <script type="text/javascript"> |
| <!-- |
| YAHOO.util.Dom.removeClass( document.body, "no_javascript" ); |
| toggle_attachment_details_visibility( ); |
| --> |
| </script> |
| [% END %] |
| [% Hook.process('end') %] |
| |
| [% PROCESS global/footer.html.tmpl %] |