Sha256: c23abccc8ad0202dbb68c46d728356e0c10d1b4ada9ff3fc49bf4456cacfa606

Contents?: true

Size: 1.05 KB

Versions: 13

Compression:

Stored size: 1.05 KB

Contents

# frozen_string_literal: true

require 'nokogiri'

module ThemeCheck
  class ValidHTMLTranslation < JsonCheck
    severity :suggestion
    category :translation
    doc docs_url(__FILE__)

    def on_file(file)
      return unless file.name.start_with?("locales/")
      return unless file.content.is_a?(Hash)

      visit_nested(file.content)
    end

    private

    def html_key?(keys)
      pluralized_key = keys[-2] if keys.length > 1
      keys[-1].end_with?('_html') || pluralized_key&.end_with?('_html')
    end

    def parse_and_add_offense(key, value)
      return unless value.is_a?(String)

      html = Nokogiri::HTML5.fragment(value, max_errors: -1)
      unless html.errors.empty?
        err_msg = html.errors.join("\n")
        add_offense("'#{key}' contains invalid HTML:\n#{err_msg}")
      end
    end

    def visit_nested(value, keys = [])
      if value.is_a?(Hash)
        value.each do |k, v|
          visit_nested(v, keys + [k])
        end
      elsif html_key?(keys)
        parse_and_add_offense(keys.join('.'), value)
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
theme-check-1.15.0 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.14.0 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.13.0 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.12.1 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.12.0 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.11.0 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.10.3 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.10.2 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.10.1 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.10.0 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.9.2 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.9.1 lib/theme_check/checks/valid_html_translation.rb
theme-check-1.9.0 lib/theme_check/checks/valid_html_translation.rb