Class: Banzai::Filter::ImageLinkFilter
- Inherits:
-
HTML::Pipeline::Filter
- Object
- HTML::Pipeline::Filter
- Banzai::Filter::ImageLinkFilter
- Defined in:
- lib/banzai/filter/image_link_filter.rb
Overview
HTML filter that wraps links around inline images.
Instance Method Summary collapse
-
#call ⇒ Object
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.
Instance Method Details
#call ⇒ Object
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.
If ‘link_replaces_image` context parameter is provided, the image is going to be replaced with a link to an image.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/banzai/filter/image_link_filter.rb', line 14 def call doc.xpath('descendant-or-self::img[not(ancestor::a)]').each do |img| link_replaces_image = !!context[:link_replaces_image] html_class = link_replaces_image ? 'with-attachment-icon' : 'no-attachment-icon' link = doc.document.create_element( 'a', class: html_class, href: img['data-src'] || img['src'], target: '_blank', rel: 'noopener noreferrer' ) # make sure the original non-proxied src carries over to the link link['data-canonical-src'] = img['data-canonical-src'] if img['data-canonical-src'] if img['data-diagram'] && img['data-diagram-src'] link['data-diagram'] = img['data-diagram'] link['data-diagram-src'] = img['data-diagram-src'] img.remove_attribute('data-diagram') img.remove_attribute('data-diagram-src') end link.children = link_replaces_image ? link_children(img) : img.clone img.replace(link) end doc end |