[%# 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> [% 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 %] </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 %]