Class: InlineSvg::TransformPipeline::Transformations::AriaAttributes

Inherits:
Transformation
  • Object
show all
Defined in:
lib/inline_svg/transform_pipeline/transformations/aria_attributes.rb

Instance Attribute Summary

Attributes inherited from Transformation

#value

Instance Method Summary collapse

Methods inherited from Transformation

create_with_value, #initialize

Constructor Details

This class inherits a constructor from InlineSvg::TransformPipeline::Transformations::Transformation

Instance Method Details

#element_id_for(base, element) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/inline_svg/transform_pipeline/transformations/aria_attributes.rb', line 27

def element_id_for(base, element)
  if element['id'].nil?
    InlineSvg::IdGenerator.generate(base, element.text)
  else
    InlineSvg::IdGenerator.generate(element['id'], element.text)
  end
end

#transform(doc) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/inline_svg/transform_pipeline/transformations/aria_attributes.rb', line 3

def transform(doc)
  doc = Nokogiri::XML::Document.parse(doc.to_html)
  svg = doc.at_css("svg")

  # Add role
  svg["role"] = "img"

  # Build aria-labelledby string
  aria_elements = []
  doc.search("svg title").each do |element|
    aria_elements << element['id'] = element_id_for("title", element)
  end

  doc.search("svg desc").each do |element|
    aria_elements << element['id'] = element_id_for("desc", element)
  end

  if aria_elements.any?
    svg["aria-labelledby"] = aria_elements.join(" ")
  end

  doc
end