Class: Banzai::Filter::ImageLinkFilter
- Inherits:
-
HTML::Pipeline::Filter
- Object
- HTML::Pipeline::Filter
- Banzai::Filter::ImageLinkFilter
- Includes:
- Concerns::PipelineTimingCheck
- Defined in:
- lib/banzai/filter/image_link_filter.rb
Overview
HTML filter that wraps links around inline images.
Constant Summary
Constants included from Concerns::PipelineTimingCheck
Concerns::PipelineTimingCheck::MAX_PIPELINE_SECONDS
Instance Method Summary collapse
-
#call ⇒ Object
Find every image that isn’t already wrapped in an
atag, 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.
Methods included from Concerns::PipelineTimingCheck
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.
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 44 45 |
# File 'lib/banzai/filter/image_link_filter.rb', line 16 def call doc.xpath('descendant-or-self::img[not(ancestor::a) and not(@data-src = "")]').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 |