diff options
Diffstat (limited to 'extensions/InlineImages')
-rw-r--r-- | extensions/InlineImages/Config.pm | 33 | ||||
-rw-r--r-- | extensions/InlineImages/Extension.pm | 63 | ||||
-rw-r--r-- | extensions/InlineImages/disabled | 0 | ||||
-rw-r--r-- | extensions/InlineImages/template/en/default/hook/bug/comments-aftercomments.html.tmpl | 111 |
4 files changed, 207 insertions, 0 deletions
diff --git a/extensions/InlineImages/Config.pm b/extensions/InlineImages/Config.pm new file mode 100644 index 000000000..77a1b09de --- /dev/null +++ b/extensions/InlineImages/Config.pm @@ -0,0 +1,33 @@ +# -*- Mode: perl; indent-tabs-mode: nil -*- +# +# 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 InlineImages Bugzilla Extension. +# +# The Initial Developer of the Original Code is Guy Pyrzak +# Portions created by the Initial Developer are Copyright (C) 2010 the +# Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Guy Pyrzak <guy.pyrzak@gmail.com> + +package Bugzilla::Extension::InlineImages; +use strict; + +use constant NAME => 'InlineImages'; + +use constant REQUIRED_MODULES => [ +]; + +use constant OPTIONAL_MODULES => [ +]; + +__PACKAGE__->NAME; diff --git a/extensions/InlineImages/Extension.pm b/extensions/InlineImages/Extension.pm new file mode 100644 index 000000000..dcfd76e1b --- /dev/null +++ b/extensions/InlineImages/Extension.pm @@ -0,0 +1,63 @@ +# -*- Mode: perl; indent-tabs-mode: nil -*- +# +# 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 InlineImages Bugzilla Extension. +# +# The Initial Developer of the Original Code is Guy Pyrzak +# Portions created by the Initial Developer are Copyright (C) 2010 the +# Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Guy Pyrzak <guy.pyrzak@gmail.com> +# Gervase Markham <gerv@gerv.net> + +package Bugzilla::Extension::InlineImages; +use strict; +use base qw(Bugzilla::Extension); +use Bugzilla::Template; + +use constant NAME => 'InlineImages'; + +our $VERSION = '0.2'; + +sub bug_format_comment { + my ($self, $args) = @_; + my $regexes = $args->{'regexes'}; + + push(@$regexes, { + match => qr~\b(attachment\s*\#?\s*(\d+))~, + replace => \&_inlineAttachments + }); +} + +sub _inlineAttachments { + my $args = shift @_; + my $attachment_id = $args->{matches}->[1]; + my $attachment_string = $args->{matches}->[0]; + + # We need to call get_attachment_link because otherwise it will be skipped + my $msg = Bugzilla::Template::get_attachment_link($attachment_id, + $attachment_string); + + my $dbh = Bugzilla->dbh; + my ($mimetype) = + $dbh->selectrow_array('SELECT mimetype + FROM attachments WHERE attach_id = ?', + undef, $attachment_id); + if ($mimetype =~ /^image\/(gif|png|jpeg)$/) { + $msg =~ s/(?=name="attach_)/ class="is_image" /; + } + + return $msg; +}; + +__PACKAGE__->NAME; diff --git a/extensions/InlineImages/disabled b/extensions/InlineImages/disabled new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/extensions/InlineImages/disabled diff --git a/extensions/InlineImages/template/en/default/hook/bug/comments-aftercomments.html.tmpl b/extensions/InlineImages/template/en/default/hook/bug/comments-aftercomments.html.tmpl new file mode 100644 index 000000000..531c18981 --- /dev/null +++ b/extensions/InlineImages/template/en/default/hook/bug/comments-aftercomments.html.tmpl @@ -0,0 +1,111 @@ +[%# +# 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 InlineImages Bugzilla Extension. +# +# The Initial Developer of the Original Code is Guy Pyrzak +# Portions created by the Initial Developer are Copyright (C) 2010 the +# Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Guy Pyrzak <guy.pyrzak@gmail.com> +# Gervase Markham <gerv@gerv.net> +#%] + +[% IF Param("allow_attachment_display") %] +<script> + YAHOO.util.Event.onDOMReady(function() { + var Dom = YAHOO.util.Dom; + + // Don't bother doing this if there are no images as attachments + if (Dom.getElementsByClassName("is_image", "a", "comments").length == 0) { + return; + } + + var comments_expand_collapse = + Dom.getElementsByClassName('bz_collapse_expand_comments', + 'ul', + 'comments'); + + // Check that what we're looking for is here + if (comments_expand_collapse.length == 0) { + // Find the table we're looking for + var commentsTable = Dom.getElementsByClassName("bz_comment_table", + "table", + "comments"); + secondColumn = commentsTable[0].getElementsByTagName("td")[1]; + var newUL = document.createElement("ul"); + if (secondColumn) { + secondColumn.appendChild(newUL); + comments_expand_collapse[0] = newUL; + } + } + + // Insert the li into the dom + var li = document.createElement("li"); + var link = document.createElement("a"); + link.id = "toggle_images"; + link.href = "#"; + link.innerHTML = "Show Inline Images"; + link.onclick = YAHOO.bz_ext_inlineImage.toggleImages; + li.appendChild(link); + if (comments_expand_collapse.length > 0) { + comments_expand_collapse[0].appendChild(li); + } + + // Check to see if user has the inlineImagesCookie == on. + // If it is, go ahead and show images for the user + var inlineImagesCookie = YAHOO.util.Cookie.get("inlineImagesCookie"); + if (inlineImagesCookie && inlineImagesCookie == "on") { + YAHOO.bz_ext_inlineImage.toggleImages(); + } + }); + + var Dom = YAHOO.util.Dom; + YAHOO.namespace("bz_ext_inlineImage"); + YAHOO.bz_ext_inlineImage.toggleImages = function(event) { + var imgs = Dom.getElementsByClassName("inline_image", "img", "comments"); + var toggle_link_text = ""; + + if (imgs.length == 0) { + // Show inline images + + var alinks = Dom.getElementsByClassName("is_image", "a", "comments"); + for (var i = 0; i < alinks.length; i++) { + var img = document.createElement("img"); + img.src = alinks[i].href; + // Might want to add some support to hide obsolete images + img.className = "inline_image"; + img.style.display = "block"; + Dom.insertAfter(img, alinks[i].parentNode); + } + + YAHOO.util.Cookie.set("inlineImagesCookie", "on"); + toggle_link_text = "Hide Inline Images"; + } + else { + // Hide inline images + + for (var i = 0; i < imgs.length; i++) { + imgs[i].parentNode.removeChild(imgs[i]); + } + + YAHOO.util.Cookie.set("inlineImagesCookie", "off"); + toggle_link_text = "Show Inline Images"; + } + + var link = document.getElementById("toggle_images"); + link.innerHTML = toggle_link_text; + + return false; + } +</script> +[% END %] |