summaryrefslogtreecommitdiffstats
path: root/extensions/InlineImages
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/InlineImages')
-rw-r--r--extensions/InlineImages/Config.pm33
-rw-r--r--extensions/InlineImages/Extension.pm63
-rw-r--r--extensions/InlineImages/disabled0
-rw-r--r--extensions/InlineImages/template/en/default/hook/bug/comments-aftercomments.html.tmpl111
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 %]