Sha256: 9b5e324f2016e92ec40ac3b9514268a12afb9d63c847b21bea354ad251f7ff1d

Contents?: true

Size: 921 Bytes

Versions: 8

Compression:

Stored size: 921 Bytes

Contents

module InlineSvg::TransformPipeline::Transformations
  class AriaAttributes < Transformation
    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

    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
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
inline_svg-1.2.1 lib/inline_svg/transform_pipeline/transformations/aria_attributes.rb
inline_svg-1.2.0 lib/inline_svg/transform_pipeline/transformations/aria_attributes.rb
inline_svg-1.1.0 lib/inline_svg/transform_pipeline/transformations/aria_attributes.rb
inline_svg-1.0.1 lib/inline_svg/transform_pipeline/transformations/aria_attributes.rb
inline_svg-1.0.0 lib/inline_svg/transform_pipeline/transformations/aria_attributes.rb
inline_svg-0.12.1 lib/inline_svg/transform_pipeline/transformations/aria_attributes.rb
inline_svg-0.12.0 lib/inline_svg/transform_pipeline/transformations/aria_attributes.rb
inline_svg-0.11.1 lib/inline_svg/transform_pipeline/transformations/aria_attributes.rb