summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--js/attachment.js22
-rw-r--r--skins/standard/attachment.css (renamed from skins/standard/create_attachment.css)108
-rw-r--r--template/en/default/attachment/create.html.tmpl2
-rw-r--r--template/en/default/attachment/diff-header.html.tmpl4
-rw-r--r--template/en/default/attachment/edit.html.tmpl327
-rw-r--r--template/en/default/attachment/show-multiple.html.tmpl2
-rw-r--r--template/en/default/bug/create/create.html.tmpl2
7 files changed, 300 insertions, 167 deletions
diff --git a/js/attachment.js b/js/attachment.js
index b62555fbe..d759248cd 100644
--- a/js/attachment.js
+++ b/js/attachment.js
@@ -19,6 +19,7 @@
* Joel Peshkin <bugreport@peshkin.net>
* Erik Stambaugh <erik@dasbistro.com>
* Marc Schumann <wurblzap@gmail.com>
+ * Guy Pyrzak <guy.pyrzak@gmail.com>
*/
function validateAttachmentForm(theform) {
@@ -307,7 +308,7 @@ function hideElementById(id)
{
var elm = document.getElementById(id);
if (elm) {
- elm.style.display = 'none';
+ YAHOO.util.Dom.addClass(elm, 'bz_default_hidden');
}
}
@@ -315,8 +316,7 @@ function showElementById(id, val)
{
var elm = document.getElementById(id);
if (elm) {
- if (!val) val = 'inline';
- elm.style.display = val;
+ YAHOO.util.Dom.removeClass(elm, 'bz_default_hidden');
}
}
@@ -327,12 +327,24 @@ function normalizeComments()
var small = document.getElementById('smallCommentFrame');
var big = document.getElementById('editFrame');
- if ( (small) && (small.style.display == 'none') )
+ if ( (small) && YAHOO.util.Dom.hasClass(small, 'bz_default_hidden') )
{
small.parentNode.removeChild(small);
}
- if ( (big) && (big.style.display == 'none') )
+ if ( (big) && YAHOO.util.Dom.hasClass(big, 'bz_default_hidden') )
{
big.parentNode.removeChild(big);
}
}
+
+function toggle_attachment_details_visibility ( )
+{
+ // show hide classes
+ var container = document.getElementById('attachment_info');
+ if( YAHOO.util.Dom.hasClass(container, 'read') ){
+ YAHOO.util.Dom.replaceClass(container, 'read', 'edit');
+ }else{
+ YAHOO.util.Dom.replaceClass(container, 'edit', 'read');
+ }
+}
+
diff --git a/skins/standard/create_attachment.css b/skins/standard/attachment.css
index 0d8a2b886..081f5ccb7 100644
--- a/skins/standard/create_attachment.css
+++ b/skins/standard/attachment.css
@@ -14,6 +14,7 @@
* Joel Peshkin <bugreport@peshkin.net>
* Erik Stambaugh <erik@dasbistro.com>
* Marc Schumann <wurblzap@gmail.com>
+ * Guy Pyrzak <guy.pyrzak@gmail.com>
*/
table.attachment_entry th {
@@ -121,10 +122,6 @@ table.attachment_info td {
vertical-align: middle;
}
-#attachment_attributes {
- width: 25%;
-}
-
#attachment_attributes div {
padding-bottom: 0.4em;
}
@@ -140,6 +137,105 @@ table.attachment_info td {
display: block;
}
-#attachment_attributes table#flags {
- padding-top: 1em;
+#smallCommentFrame, #attachment_flags {
+ float: left;
+}
+
+#smallCommentFrame {
+ margin-right: 1.5em;
+}
+
+#attachment_comments_and_flags, #attachment_actions {
+ clear: both;
+ margin-bottom: 1ex;
+}
+
+#attachment_information_read_only .title {
+ font-weight: bold;
+ font-size: 1.5em;
+ padding: 0;
+ margin: 0;
+}
+
+#attachment_information_read_only .title #bz_edit {
+ font-size: 0.7em;
+}
+
+#attachment_information_read_only .details {
+ font-family: monospace;
+}
+
+#attachment_info.read #attachment_information_edit {
+ display: none;
+}
+
+#attachment_info.edit #attachment_information_read_only {
+ display: none;
+}
+
+#attachment_info.edit #attachment_view_window {
+ float: left;
+ width: 80%;
+}
+
+#attachment_info.edit #attachment_information_edit {
+ width: 20%;
}
+
+#attachment_info.edit #attachment_information_edit input.text,
+#attachment_info.edit #attachment_information_edit textarea {
+ width: 90%;
+}
+
+#attachment_isobsolete {
+ padding-right: 1em;
+}
+
+#attachment_information_edit {
+ float: left;
+}
+
+#smallCommentFrame textarea {
+ display: block;
+}
+
+textarea.bz_private {
+ border: 1px solid #F8C8BA;
+}
+
+#update {
+ clear: both;
+ padding: 1.5em 0;
+ display: block;
+}
+
+textarea {
+ font-family: monospace;
+}
+
+div#update_container {
+ clear: both;
+}
+
+#attachment_flags {
+ margin-bottom: 1em;
+}
+
+#attachment_flags p {
+ padding-bottom: 0;
+ margin-bottom: 0;
+}
+
+#editFrame, #viewDiffFrame, #viewFrame {
+ height: 400px;
+ width: 100%;
+}
+
+.details span.bz_private{
+ border-left: 1px solid darkred;
+ padding-left: 0.5em;
+}
+
+.no_javascript .bz_hide, .no_javascript .bz_edit {
+ display: none;
+} \ No newline at end of file
diff --git a/template/en/default/attachment/create.html.tmpl b/template/en/default/attachment/create.html.tmpl
index f00a0ade4..f440f4583 100644
--- a/template/en/default/attachment/create.html.tmpl
+++ b/template/en/default/attachment/create.html.tmpl
@@ -33,7 +33,7 @@
title = title
header = header
subheader = subheader
- style_urls = [ 'skins/standard/create_attachment.css' ]
+ style_urls = [ 'skins/standard/attachment.css' ]
javascript_urls = [ "js/attachment.js", "js/util.js" ]
doc_section = "attachments.html"
%]
diff --git a/template/en/default/attachment/diff-header.html.tmpl b/template/en/default/attachment/diff-header.html.tmpl
index 663d9b766..30b8e98e9 100644
--- a/template/en/default/attachment/diff-header.html.tmpl
+++ b/template/en/default/attachment/diff-header.html.tmpl
@@ -53,11 +53,11 @@ Interdiff of #[% oldid %] and #[% newid %] for [% terms.bug %] #[% bugid %]
[% END %]
[% PROCESS global/header.html.tmpl doc_section = "attachments.html#patchviewer"
javascript_urls = "js/attachment.js"
- style_urls = ['skins/standard/create_attachment.css'] %]
+ style_urls = ['skins/standard/attachment.css'] %]
[% ELSE %]
<html>
<head>
- <link href="skins/standard/create_attachment.css" rel="stylesheet" type="text/css">
+ <link href="skins/standard/attachment.css" rel="stylesheet" type="text/css">
<script src="js/attachment.js" type="text/javascript"></script>
</head>
<body onload="[% onload FILTER html %]">
diff --git a/template/en/default/attachment/edit.html.tmpl b/template/en/default/attachment/edit.html.tmpl
index fa8a53a4a..5407c0aa2 100644
--- a/template/en/default/attachment/edit.html.tmpl
+++ b/template/en/default/attachment/edit.html.tmpl
@@ -17,6 +17,7 @@
#
# 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 %]
@@ -37,7 +38,8 @@
subheader = subheader
doc_section = "attachments.html"
javascript_urls = ['js/attachment.js']
- style_urls = ['skins/standard/create_attachment.css']
+ style_urls = ['skins/standard/attachment.css']
+ bodyclasses = "no_javascript"
%]
[%# No need to display the Diff button and iframe if the attachment is not a patch. %]
@@ -54,12 +56,38 @@
<input type="hidden" name="token" value="[% issue_hash_token([attachment.id, attachment.modification_time]) FILTER html %]">
[% END %]
- <table class="attachment_info" width="100%">
-
- <tr>
- <td id="attachment_attributes">
+ <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</a>)</span>
+ [% END %]
+ </div>
+ [% IF NOT attachment.isurl %]
+ <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></span>
+ [% END %]
+ </div>
+ [% END %]
+ </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>
+ <label for="description">Description:</label>&nbsp;
[% INCLUDE global/textarea.html.tmpl
id = 'description'
name = 'description'
@@ -68,38 +96,34 @@
wrap = 'soft'
classes = 'block' _ editable_or_hide
defaultcontent = attachment.description
- %]
- [% IF !can_edit %]
- [%+ attachment.description FILTER wrap_comment(25) FILTER html %]
- [% END %]
+ %]
</div>
[% IF attachment.isurl %]
- <input type="hidden" name="filename"
- value="[% attachment.filename FILTER html %]">
- <input type="hidden" name="contenttypeentry"
- value="[% attachment.contenttype FILTER html %]">
+ <input type="hidden" name="filename"
+ value="[% attachment.filename FILTER html %]">
+ <input type="hidden" name="contenttypeentry"
+ value="[% attachment.contenttype FILTER html %]">
[% ELSE %]
<div id="attachment_filename">
<label for="filename">Filename:</label>
- <input type="text" size="20" class="block[% editable_or_hide %]"
+ <input type="text" size="20" class="text block[% editable_or_hide %]"
id="filename" name="filename"
- value="[% attachment.filename FILTER html %]">
- [% IF !can_edit %]
- [%+ attachment.filename FILTER truncate(25) FILTER html %]
- [% END %]
+ value="[% attachment.filename FILTER html %]">
</div>
<div id="attachment_mimetype">
<label for="contenttypeentry">MIME Type:</label>
- <input type="text" size="20" class="block[% editable_or_hide %]"
+ <input type="text" size="20" class="text block[% editable_or_hide %]"
id="contenttypeentry" name="contenttypeentry"
- value="[% attachment.contenttype FILTER html %]">
- [% IF !can_edit %]
- [%+ attachment.contenttype FILTER truncate(25) FILTER html %]
- [% END %]
+ 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 %]
@@ -109,154 +133,148 @@
[% END %]
</div>
- <div id="attachment_creator">
- <span class="label">Creator:</span>
- [%+ INCLUDE global/user.html.tmpl who = attachment.attacher %]
- </div>
-
<div id="attachment_ispatch">
<input type="checkbox" id="ispatch" name="ispatch" value="1"
- [%+ IF !can_edit %]class="bz_hidden_option"[% END %]
[%+ 'checked="checked"' IF attachment.ispatch %]>
- [% IF can_edit %]
- <label for="ispatch">patch</label>
- [% ELSE %]
- <span class="label">Is Patch:</span>
- [%+ attachment.ispatch ? "yes" : "no" %]
- [% END %]
+ <label for="ispatch">patch</label>
</div>
[% END %]
+ <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>
- <div id="attachment_isobsolete">
- <input type="checkbox" id="isobsolete" name="isobsolete" value="1"
- [%+ IF !can_edit %]class="bz_hidden_option"[% END %]
- [%+ 'checked="checked"' IF attachment.isobsolete %]>
- [% IF can_edit %]
- <label for="isobsolete">obsolete</label>
- [% ELSE %]
- <span class="label">Is Obsolete:</span>
- [%+ attachment.isobsolete ? "yes" : "no" %]
- [% END %]
- </div>
-
- [% IF user.is_insider %]
- <div id="attachment_isprivate">
- <input type="checkbox" id="isprivate" name="isprivate" value="1"
- [%+ IF !can_edit %]class="bz_hidden_option"[% END %]
- [%+ '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" %]
+ [% 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>
- [% END %]
+ </div>
+ </div>
- [% IF attachment.flag_types.size > 0 %]
- <div id="attachment_flags">
- [% PROCESS "flag/list.html.tmpl" bug_id = attachment.bug_id
- attach_id = attachment.id
- flag_types = attachment.flag_types
- read_only_flags = !can_edit
- %]
+ <div id="attachment_view_window">
+ [% IF !attachment.datasize %]
+ <div><b>The content of this attachment has been deleted.</b></div>
+ [% ELSIF attachment.isurl %]
+ <div>
+ <a href="[% attachment.data FILTER html %]">
+ [% IF attachment.datasize < 120 %]
+ [% attachment.data FILTER html %]
+ [% ELSE %]
+ [% attachment.data FILTER truncate(80) FILTER html %]
+ &nbsp;...
+ [% attachment.data.match(".*(.{20})$").0 FILTER html %]
+ [% END %]
+ </a>
</div>
- [% END %]
-
- [% IF user.id %]
- <div id="smallCommentFrame">
- <label for="comment">Comment (on the [% terms.bug %]):</label>
+ [% 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 = 'comment'
+ id = 'editFrame'
name = 'comment'
- minrows = 5
- cols = 25
+ classes = 'bz_default_hidden'
+ minrows = 10
+ cols = 80
wrap = 'soft'
- classes = 'block'
+ defaultcontent = (attachment.contenttype.match('^text\/')) ?
+ attachment.data.replace('(.*\n|.+)', '>$1') : undef
%]
+ <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>
+ <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>');
+ [% 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>
-
- <input type="submit" value="Submit" id="update"><br><br>
[% END %]
- </td>
-
- [% IF !attachment.datasize %]
- <td width="75%"><b>The content of this attachment has been deleted.</b></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 %]
- &nbsp;...
- [% attachment.data.match(".*(.{20})$").0 FILTER html %]
- [% END %]
- </a>
- </td>
- [% ELSIF !Param("allow_attachment_display") %]
- <td id="view_disabled" width="50%">
- <p><b>
- The attachment is not viewable in your browser due to security
- restrictions enabled by [% terms.Bugzilla %].
- </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>
- </td>
- [% ELSIF attachment.is_viewable %]
- <td width="75%">
+ </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 = 'editFrame'
+ id = 'comment'
name = 'comment'
- style = 'height: 400px; width: 100%; display: none'
minrows = 10
cols = 80
wrap = 'soft'
- defaultcontent = (attachment.contenttype.match('^text\/')) ?
- attachment.data.replace('(.*\n|.+)', '>$1') : undef
+ classes = classNames
%]
- <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">
- <!--
- var patchviewerinstalled = 0;
- var attachment_id = [% attachment.id %];
- if (typeof document.getElementById == "function") {
-[% IF use_patchviewer %]
- var patchviewerinstalled = 1;
- document.write('<iframe id="viewDiffFrame" style="height: 400px; width: 100%; display: none;"><\/iframe>');
-[% END %]
- 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);" style="display: none;">Undo Edit As Comment<\/button>');
- document.write('<button type="button" id="redoEditButton" onclick="redoEditAsComment(patchviewerinstalled);" style="display: none;">Redo Edit As Comment<\/button>');
-[% 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);" style="display: none;">View Attachment As Raw<\/button>');
- }
- //-->
- </script>
- </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>
+ </div>
+ [% END %]
+ [% IF attachment.flag_types.size > 0 %]
+ <div id="attachment_flags">
+ [% PROCESS "flag/list.html.tmpl" bug_id = attachment.bug_id
+ attach_id = attachment.id
+ flag_types = attachment.flag_types
+ read_only_flags = !can_edit
+ %]
+ </div>
[% END %]
- </tr>
- </table>
+ [% IF user.id %]
+ <div id="update_container">
+ <input type="submit" value="Submit" id="update">
+ </div>
+ [% END %]
+ </div>
+ </div>
+ </div>
</form>
<div id="attachment_actions">
@@ -283,7 +301,14 @@
[% " |" 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 %]
diff --git a/template/en/default/attachment/show-multiple.html.tmpl b/template/en/default/attachment/show-multiple.html.tmpl
index bcc297713..15e20e894 100644
--- a/template/en/default/attachment/show-multiple.html.tmpl
+++ b/template/en/default/attachment/show-multiple.html.tmpl
@@ -31,7 +31,7 @@
title = title
header = header
subheader = filtered_summary
- style_urls = ['skins/standard/create_attachment.css']
+ style_urls = ['skins/standard/attachment.css']
%]
<br>
diff --git a/template/en/default/bug/create/create.html.tmpl b/template/en/default/bug/create/create.html.tmpl
index fe5f130d8..a5bfb0739 100644
--- a/template/en/default/bug/create/create.html.tmpl
+++ b/template/en/default/bug/create/create.html.tmpl
@@ -31,7 +31,7 @@
[% PROCESS global/header.html.tmpl
title = title
style_urls = [ 'skins/standard/yui/autocomplete.css',
- 'skins/standard/create_attachment.css',
+ 'skins/standard/attachment.css',
'skins/standard/yui/calendar.css' ]
javascript_urls = [ "js/yui/bz_autocomplete_bundle.js",
"js/attachment.js", "js/util.js", "js/yui/calendar.js",