gecko-dev/webtools/bugzilla/template/default/attachment/edit.atml

198 строки
7.0 KiB
Plaintext
Executable File

[%# Define strings that will serve as the title and header of this page %]
[% title = BLOCK %]Edit Attachment #[% attachid %] for Bug #[% bugid %][% END %]
[% h1 = BLOCK %]Edit Attachment #[% attachid %] for <a href="show_bug.cgi?id=[% bugid %]">Bug #[% bugid %]</a>[% END %]
[% h2 = BLOCK %][% bugsummary FILTER html %][% END %]
[% INCLUDE global/header
title = title
h1 = h1
h2 = h2
style = "
th { text-align: right; vertical-align: top; }
td { text-align: left; vertical-align: top; }
td#info { text-align: right; vertical-align: top; }
td#actions { text-align: right; vertical-align: bottom; }
td#noview { text-align: left; vertical-align: center; }
"
%]
<form method="post" action="attachment.cgi" onsubmit="normalizeComments();">
<input type="hidden" name="id" value="[% attachid %]">
<input type="hidden" name="action" value="update">
<table width="100%">
<tr>
<td width="25%">
<small>
<b>Description:</b><br>
<textarea rows="3" cols="25" name="description" wrap="soft">[% description %]</textarea><br>
<b>MIME Type:</b><br>
<input type="text" size="20" name="mimetype" value="[% mimetype %]"><br>
<b>Flags:</b><br>
<input type="checkbox" name="ispatch" value="1"[% " checked" IF ispatch %]>patch
<input type="checkbox" name="isobsolete" value="1"[% " checked" IF isobsolete %]>obsolete<br>
[% IF statusdefs.size %]
<b>Status:</b><br>
[% FOREACH def = statusdefs %]
<input type="checkbox" name="status" value="[% def.id %]"[% " checked" IF statuses.${def.id} %]>[% def.name %]<br>
[% END %]
[% END %]
<div id="smallCommentFrame">
<b>Comment (on the bug):</b><br>
<textarea name="comment" rows="5" cols="25" wrap="soft"></textarea><br>
</div>
<input type="submit" value="Submit">
</small>
</td>
[% IF isviewable %]
<td width="75%">
<textarea id="editFrame" name="comment" style="height: 400px; width: 100%; display: none;"></textarea>
<iframe id="viewFrame" src="attachment.cgi?id=[% attachid %]&action=view" style="height: 400px; width: 100%;">
<b>You cannot view the attachment while editing it because your browser does not support IFRAMEs.
<a href="attachment.cgi?id=[% attachid %]&action=view">View the attachment on a separate page</a>.</b>
</iframe>
<button id="editButton" onclick="editAsComment();">Edit Attachment As Comment</button>
<button id="undoEditButton" onclick="undoEditAsComment();" style="display: none;">Undo Edit As Comment</button>
<button id="redoEditButton" onclick="redoEditAsComment();" style="display: none;">Redo Edit As Comment</button>
</td>
[% ELSE %]
<td id="noview" width="50%">
<p><b>
Attachment cannot be viewed because its MIME type is not either text/*, image/*, or application/vnd.mozilla.*.
<a href="attachment.cgi?id=[% attachid %]&action=view">Download the attachment instead</a>.
</b></p>
</td>
[% END %]
</tr>
</table>
Attachments on this Bug:
[% FOREACH a = attachments %]
[% IF a == attachid %]
#[% a %]
[% ELSE %]
<a href="attachment.cgi?id=[% a %]&action=edit">#[% a %]</a>
[% END %]
[% "|" UNLESS loop.last() %]
[% END %]
</form>
<script type="application/x-javascript" language="JavaScript">
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 mimeType = '[% mimetype %]';
if ( mimeType == 'text/plain' )
{
theContent = theContent.replace( /^<html><head\/><body><pre>/ , "" );
theContent = theContent.replace( /<\/pre><\/body><\/html>$/ , "" );
theContent = theContent.replace( /&lt;/gi , "<" );
theContent = theContent.replace( /&gt;/gi , ">" );
theContent = theContent.replace( /&amp;/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" );
hideElementById('viewFrame');
hideElementById('editButton');
hideElementById('smallCommentFrame');
showElementById('undoEditButton');
// Show the TEXTAREA that will contain the editable attachment
// and copy the content of the attachment into it.
showElementById('editFrame');
var editFrame = document.getElementById('editFrame');
editFrame.value = theContent;
editFrame.value += "\n\n";
}
function undoEditAsComment()
{
// Hide the "edit attachment as comment" TEXTAREA and the "undo" button.
hideElementById('undoEditButton');
hideElementById('editFrame');
// Show the "view attachment" IFRAME, the "redo" button that allows the user
// to go back to editing the attachment as a comment, and the small comment field.
showElementById('viewFrame');
showElementById('redoEditButton');
showElementById('smallCommentFrame');
}
function redoEditAsComment()
{
// Hide the "view attachment" IFRAME, the "redo" button that allows the user
// to go back to editing the attachment as a comment, and the small comment field.
hideElementById('viewFrame');
hideElementById('redoEditButton');
hideElementById('smallCommentFrame');
// Show the "edit attachment as comment" TEXTAREA and the "undo" button.
showElementById('undoEditButton');
showElementById('editFrame');
}
function hideElementById(id)
{
var elm = document.getElementById(id);
if (!elm) return;
elm.style.setProperty('display', 'none', '');
}
function showElementById(id, val)
{
var elm = document.getElementById(id);
if (!elm) return;
if (!val) val = 'inline';
elm.style.setProperty('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.style.getProperty('display') == 'none' )
{
small.parentNode.removeChild(small);
}
if ( big.style.getProperty('display') == 'none' )
{
big.parentNode.removeChild(big);
}
}
</script>
<br>
[% INCLUDE global/footer %]