diff options
author | connorshea <connor.james.shea@gmail.com> | 2016-03-30 16:03:49 -0600 |
---|---|---|
committer | connorshea <connor.james.shea@gmail.com> | 2016-04-04 19:44:07 -0600 |
commit | b9abf938edf52e762d320b1eb8732155e23d7b72 (patch) | |
tree | fa58191817cb644a1eeb969b23e1d2cc58e654cb /lib/banzai | |
parent | 67136007933425414293602bc75d2ba4822f2a93 (diff) | |
download | gitlab-ce-b9abf938edf52e762d320b1eb8732155e23d7b72.tar.gz |
Wrap images in discussions and wikis with a link to the image source using ImageLinkFilter.
Resolves #14411.
See merge request !3464
Diffstat (limited to 'lib/banzai')
-rw-r--r-- | lib/banzai/filter/image_link_filter.rb | 27 | ||||
-rw-r--r-- | lib/banzai/pipeline/gfm_pipeline.rb | 1 |
2 files changed, 28 insertions, 0 deletions
diff --git a/lib/banzai/filter/image_link_filter.rb b/lib/banzai/filter/image_link_filter.rb new file mode 100644 index 00000000000..ccd106860bd --- /dev/null +++ b/lib/banzai/filter/image_link_filter.rb @@ -0,0 +1,27 @@ +module Banzai + module Filter + # HTML filter that wraps links around inline images. + class ImageLinkFilter < HTML::Pipeline::Filter + + # Find every image that isn't already wrapped in an `a` tag, create + # a new node (a link to the image source), copy the image as a child + # of the anchor, and then replace the img with the link-wrapped version. + def call + doc.xpath('descendant-or-self::img[not(ancestor::a)]').each do |img| + + link = doc.document.create_element( + 'a', + class: 'no-attachment-icon', + href: img['src'], + target: '_blank' + ) + + link.children = img.clone + img.replace(link) + end + + doc + end + end + end +end diff --git a/lib/banzai/pipeline/gfm_pipeline.rb b/lib/banzai/pipeline/gfm_pipeline.rb index 8cd4b50e65a..ed3cfd6b023 100644 --- a/lib/banzai/pipeline/gfm_pipeline.rb +++ b/lib/banzai/pipeline/gfm_pipeline.rb @@ -7,6 +7,7 @@ module Banzai Filter::SanitizationFilter, Filter::UploadLinkFilter, + Filter::ImageLinkFilter, Filter::EmojiFilter, Filter::TableOfContentsFilter, Filter::AutolinkFilter, |