350 lines
12 KiB
Cheetah
350 lines
12 KiB
Cheetah
[%# 1.0@bugzilla.org %]
|
|
[%# 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>
|
|
#%]
|
|
|
|
[% 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 %]
|
|
[% h1 = BLOCK %]
|
|
Attachment [% attachment.id %] Details for
|
|
[%+ "$terms.Bug ${attachment.bug_id}" FILTER bug_link(attachment.bug_id) FILTER none %]
|
|
[% END %]
|
|
[% h2 = BLOCK %][% bugsummary FILTER html %][% END %]
|
|
|
|
[% PROCESS global/header.html.tmpl
|
|
title = title
|
|
h1 = h1
|
|
h2 = h2
|
|
style = "
|
|
table.attachment_info th { text-align: right; vertical-align: top; }
|
|
table.attachment_info td { text-align: left; vertical-align: top; }
|
|
#noview { text-align: left; vertical-align: middle; }
|
|
|
|
table#flags th, table#flags td { font-size: small; vertical-align: baseline; text-align: left; }
|
|
"
|
|
%]
|
|
|
|
<script type="text/javascript">
|
|
<!--
|
|
var prev_mode = 'raw';
|
|
var current_mode = 'raw';
|
|
var has_edited = 0;
|
|
var has_viewed_as_diff = 0;
|
|
function editAsComment()
|
|
{
|
|
// Get the content of the document as a string.
|
|
var viewFrame = document.getElementById('viewFrame');
|
|
var aSerializer = new XMLSerializer();
|
|
var contentDocument = viewFrame.contentDocument;
|
|
var theContent = aSerializer.serializeToString(contentDocument);
|
|
|
|
// If this is a plaintext document, remove cruft that Mozilla adds
|
|
// because it treats it as an HTML document with a big PRE section.
|
|
// http://bugzilla.mozilla.org/show_bug.cgi?id=86012
|
|
var contentType = '[% contenttype FILTER js %]';
|
|
if ( contentType == 'text/plain' )
|
|
{
|
|
theContent = theContent.replace( /^<html><head\/?><body><pre>/i , "" );
|
|
theContent = theContent.replace( /<\/pre><\/body><\/html>$/i , "" );
|
|
theContent = theContent.replace( /</gi , "<" );
|
|
theContent = theContent.replace( />/gi , ">" );
|
|
theContent = theContent.replace( /&/gi , "&" );
|
|
}
|
|
|
|
// Add mail-style quote indicators (>) to the beginning of each line.
|
|
// ".*\n" matches lines that end with a newline, while ".+" matches
|
|
// the rare situation in which the last line of a file does not end
|
|
// with a newline.
|
|
theContent = theContent.replace( /(.*\n|.+)/g , ">$1" );
|
|
|
|
switchToMode('edit');
|
|
|
|
// Copy the contents of the diff into the textarea
|
|
var editFrame = document.getElementById('editFrame');
|
|
editFrame.value = theContent;
|
|
editFrame.value += "\n\n";
|
|
|
|
has_edited = 1;
|
|
}
|
|
function undoEditAsComment()
|
|
{
|
|
switchToMode(prev_mode);
|
|
}
|
|
function redoEditAsComment()
|
|
{
|
|
switchToMode('edit');
|
|
}
|
|
[% IF patchviewerinstalled %]
|
|
function viewDiff()
|
|
{
|
|
switchToMode('diff');
|
|
|
|
// If we have not viewed as diff before, set the view diff frame URL
|
|
if (!has_viewed_as_diff) {
|
|
var viewDiffFrame = document.getElementById('viewDiffFrame');
|
|
viewDiffFrame.src =
|
|
'attachment.cgi?id=[% attachment.id %]&action=diff&headers=0';
|
|
has_viewed_as_diff = 1;
|
|
}
|
|
}
|
|
[% END %]
|
|
function viewRaw()
|
|
{
|
|
switchToMode('raw');
|
|
}
|
|
|
|
function switchToMode(mode)
|
|
{
|
|
if (mode == current_mode) {
|
|
alert('switched to same mode! This should not happen.');
|
|
return;
|
|
}
|
|
|
|
// Switch out of current mode
|
|
if (current_mode == 'edit') {
|
|
hideElementById('editFrame');
|
|
hideElementById('undoEditButton');
|
|
} else if (current_mode == 'raw') {
|
|
hideElementById('viewFrame');
|
|
[% IF patchviewerinstalled %]
|
|
hideElementById('viewDiffButton');
|
|
[% END %]
|
|
hideElementById(has_edited ? 'redoEditButton' : 'editButton');
|
|
hideElementById('smallCommentFrame');
|
|
} else if (current_mode == 'diff') {
|
|
[% IF patchviewerinstalled %]
|
|
hideElementById('viewDiffFrame');
|
|
[% END %]
|
|
hideElementById('viewRawButton');
|
|
hideElementById(has_edited ? 'redoEditButton' : 'editButton');
|
|
hideElementById('smallCommentFrame');
|
|
}
|
|
|
|
// Switch into new mode
|
|
if (mode == 'edit') {
|
|
showElementById('editFrame');
|
|
showElementById('undoEditButton');
|
|
} else if (mode == 'raw') {
|
|
showElementById('viewFrame');
|
|
[% IF patchviewerinstalled %]
|
|
showElementById('viewDiffButton');
|
|
[% END %]
|
|
showElementById(has_edited ? 'redoEditButton' : 'editButton');
|
|
showElementById('smallCommentFrame');
|
|
} else if (mode == 'diff') {
|
|
[% IF patchviewerinstalled %]
|
|
showElementById('viewDiffFrame');
|
|
[% END %]
|
|
showElementById('viewRawButton');
|
|
showElementById(has_edited ? 'redoEditButton' : 'editButton');
|
|
showElementById('smallCommentFrame');
|
|
}
|
|
|
|
prev_mode = current_mode;
|
|
current_mode = mode;
|
|
}
|
|
|
|
function hideElementById(id)
|
|
{
|
|
var elm = document.getElementById(id);
|
|
if (elm) {
|
|
elm.style.display = 'none';
|
|
}
|
|
}
|
|
|
|
function showElementById(id, val)
|
|
{
|
|
var elm = document.getElementById(id);
|
|
if (elm) {
|
|
if (!val) val = 'inline';
|
|
elm.style.display = val;
|
|
}
|
|
}
|
|
|
|
function normalizeComments()
|
|
{
|
|
// Remove the unused comment field from the document so its contents
|
|
// do not get transmitted back to the server.
|
|
|
|
var small = document.getElementById('smallCommentFrame');
|
|
var big = document.getElementById('editFrame');
|
|
if ( (small) && (small.style.display == 'none') )
|
|
{
|
|
small.parentNode.removeChild(small);
|
|
}
|
|
if ( (big) && (big.style.display == 'none') )
|
|
{
|
|
big.parentNode.removeChild(big);
|
|
}
|
|
}
|
|
//-->
|
|
</script>
|
|
|
|
<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">
|
|
|
|
<table class="attachment_info" width="100%">
|
|
|
|
<tr>
|
|
<td width="25%">
|
|
<small>
|
|
<b>Description:</b><br>
|
|
[% INCLUDE global/textarea.html.tmpl
|
|
name = 'description'
|
|
minrows = 3
|
|
cols = 25
|
|
wrap = 'soft'
|
|
defaultcontent = attachment.description
|
|
%]<br>
|
|
|
|
[% IF attachment.isurl %]
|
|
<input type="hidden" name="filename"
|
|
value="[% attachment.filename FILTER html %]"><br>
|
|
<input type="hidden" name="contenttypeentry"
|
|
value="[% attachment.contenttype FILTER html %]"><br>
|
|
[% ELSE %]
|
|
<b>Filename:</b><br>
|
|
<input type="text" size="20" name="filename"
|
|
value="[% attachment.filename FILTER html %]"><br>
|
|
<b>Size: </b>[% attachment.datasize FILTER unitconvert %]<br>
|
|
|
|
<b>MIME Type:</b><br>
|
|
<input type="text" size="20" name="contenttypeentry"
|
|
value="[% attachment.contenttype FILTER html %]"><br>
|
|
|
|
<input type="checkbox" id="ispatch" name="ispatch" value="1"
|
|
[% 'checked="checked"' IF attachment.ispatch %]>
|
|
<label for="ispatch">patch</label>
|
|
[% END %]
|
|
<input type="checkbox" id="isobsolete" name="isobsolete" value="1"
|
|
[% 'checked="checked"' IF attachment.isobsolete %]>
|
|
<label for="isobsolete">obsolete</label><br>
|
|
[% IF (Param("insidergroup") && UserInGroup(Param("insidergroup"))) %]
|
|
<input type="checkbox" name="isprivate" value="1"
|
|
[% " checked" IF attachment.isprivate %]> private<br><br>
|
|
[% ELSE %]<br>
|
|
[% END %]
|
|
|
|
[% IF flag_types.size > 0 %]
|
|
[% PROCESS "flag/list.html.tmpl" bug_id = attachment.bug_id
|
|
attach_id = attachment.id %]<br>
|
|
[% END %]
|
|
|
|
<div id="smallCommentFrame">
|
|
<b>Comment (on the [% terms.bug %]):</b><br>
|
|
[% INCLUDE global/textarea.html.tmpl
|
|
name = 'comment'
|
|
minrows = 5
|
|
cols = 25
|
|
wrap = 'soft'
|
|
%]<br>
|
|
</div>
|
|
|
|
<input type="submit" value="Submit"><br><br>
|
|
<strong>Actions:</strong>
|
|
<a href="attachment.cgi?id=[% attachment.id %]">View</a>
|
|
[% IF attachment.ispatch && patchviewerinstalled %]
|
|
| <a href="attachment.cgi?id=[% attachment.id %]&action=diff">Diff</a>
|
|
[% END %]
|
|
</small>
|
|
</td>
|
|
|
|
[% IF isviewable %]
|
|
<td width="75%">
|
|
[% INCLUDE global/textarea.html.tmpl
|
|
id = 'editFrame'
|
|
name = 'comment'
|
|
style = 'height: 400px; width: 100%; display: none'
|
|
minrows = 10
|
|
cols = 80
|
|
wrap = 'soft'
|
|
%]
|
|
<iframe id="viewFrame" src="attachment.cgi?id=[% attachment.id %]" style="height: 400px; width: 100%;">
|
|
<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>
|
|
<script type="text/javascript">
|
|
<!--
|
|
if (typeof document.getElementById == "function") {
|
|
[% IF patchviewerinstalled %]
|
|
document.write('<iframe id="viewDiffFrame" style="height: 400px; width: 100%; display: none;"></iframe>');
|
|
[% END %]
|
|
document.write('<button type="button" id="editButton" onclick="editAsComment();">Edit Attachment As Comment</button>');
|
|
document.write('<button type="button" id="undoEditButton" onclick="undoEditAsComment();" style="display: none;">Undo Edit As Comment</button>');
|
|
document.write('<button type="button" id="redoEditButton" onclick="redoEditAsComment();" style="display: none;">Redo Edit As Comment</button>');
|
|
[% IF patchviewerinstalled %]
|
|
document.write('<button type="button" id="viewDiffButton" onclick="viewDiff();">View Attachment As Diff</button>');
|
|
[% END %]
|
|
document.write('<button type="button" id="viewRawButton" onclick="viewRaw();" style="display: none;">View Attachment As Raw</button>');
|
|
}
|
|
//-->
|
|
</script>
|
|
</td>
|
|
[% ELSIF attachment.isurl %]
|
|
<td width="75%">
|
|
<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>
|
|
</td>
|
|
[% ELSE %]
|
|
<td id="noview" width="50%">
|
|
<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>
|
|
</td>
|
|
[% END %]
|
|
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
Attachments on this [% terms.Bug %]:
|
|
[% FOREACH a = attachments %]
|
|
[% IF a == attachment.id %]
|
|
[% a %]
|
|
[% ELSE %]
|
|
<a href="attachment.cgi?id=[% a %]&action=edit">[% a %]</a>
|
|
[% END %]
|
|
[% " |" UNLESS loop.last() %]
|
|
[% END %]
|
|
|
|
</form>
|
|
|
|
<br>
|
|
|
|
[% PROCESS global/footer.html.tmpl %]
|