diff options
-rw-r--r-- | js/attachment.js | 22 | ||||
-rw-r--r-- | skins/standard/attachment.css (renamed from skins/standard/create_attachment.css) | 108 | ||||
-rw-r--r-- | template/en/default/attachment/create.html.tmpl | 2 | ||||
-rw-r--r-- | template/en/default/attachment/diff-header.html.tmpl | 4 | ||||
-rw-r--r-- | template/en/default/attachment/edit.html.tmpl | 335 | ||||
-rw-r--r-- | template/en/default/attachment/show-multiple.html.tmpl | 2 | ||||
-rw-r--r-- | template/en/default/bug/create/create.html.tmpl | 2 |
7 files changed, 305 insertions, 170 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..f12d9b682 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; + display: block; +} + +textarea { + font-family: monospace; +} + +div#update_container { + clear: both; + padding: 1.5em 0; +} + +#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..6a98a7f05 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> [% 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,150 @@ [% 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 %] + ... + [% attachment.data.match(".*(.{20})$").0 FILTER html %] + [% END %] + </a> + </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' + 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> [% END %] - + </div> + <div id="attachment_comments_and_flags"> [% IF user.id %] - <div id="smallCommentFrame"> + <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 = 5 - cols = 25 + minrows = 10 + cols = 80 wrap = 'soft' - classes = 'block' + classes = classNames %] </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 %] - ... - [% 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%"> - [% INCLUDE global/textarea.html.tmpl - id = 'editFrame' - 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 - %] - <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> - [% END %] - </tr> - </table> + [% END %] + <div id="attachment_flags"> + [% IF attachment.flag_types.size > 0 %] + + [% PROCESS "flag/list.html.tmpl" bug_id = attachment.bug_id + attach_id = attachment.id + flag_types = attachment.flag_types + read_only_flags = !can_edit + %] + + [% END %] + </div> + [% 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 +303,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", |