diff options
| author | James Lopez <james@jameslopez.es> | 2016-04-05 09:36:49 +0200 |
|---|---|---|
| committer | James Lopez <james@jameslopez.es> | 2016-04-05 09:36:49 +0200 |
| commit | 850180aa393e2cfc124bb9687a123a196cff734c (patch) | |
| tree | 2d71ff44dd3761f3583fca847c440f08620cad80 /lib | |
| parent | 7f7769172e81dc8bfdb037965ec7bf51c95578ec (diff) | |
| parent | 6bf4e9e75232be83995a09f3a83e47fd0103273f (diff) | |
| download | gitlab-ce-850180aa393e2cfc124bb9687a123a196cff734c.tar.gz | |
Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ce into fix/project-import_url
Diffstat (limited to 'lib')
| -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, |
