class Applitools::Selenium::CssParser::FindEmbeddedResources
Attributes
Public Class Methods
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 16 def initialize(css) self.css = css @nodes_by_type = {} end
Public Instance Methods
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 25 def fonts fetch_urls(font_face_rules) end
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 29 def images fetch_urls(images_rules) end
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 21 def imported_css fetch_urls(import_rules) end
Private Instance Methods
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 72 def css_nodes @css_nodes ||= parse_nodes end
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 51 def fetch_urls(nodes) nodes.map { |n| url(n) }.flatten.compact end
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 60 def font_face_rules # css_nodes.select { |n| n[:node] == :at_rule && n[:name] == 'font-face' } nodes_by_type[:font_face_rules] end
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 65 def images_rules # css_nodes.select { |n| n[:node] == :style_rule }.map { |n| n[:children] } # .flatten # .select { |n| n[:node] == :property && (n[:name] == 'background' || n[:name] == 'background-image') } nodes_by_type[:images_rules] end
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 55 def import_rules # css_nodes.select { |n| n[:node] == :at_rule && n[:name] == 'import' } nodes_by_type[:import_rules] end
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 76 def nodes_by_type return @nodes_by_type unless @nodes_by_type.empty? @nodes_by_type[:import_rules] ||= [] @nodes_by_type[:font_face_rules] ||= [] @nodes_by_type[:images_rules] ||= [] css_nodes.each do |n| @nodes_by_type[:import_rules] << n if n[:node] == :at_rule && n[:name] == 'import' @nodes_by_type[:font_face_rules] << n if n[:node] == :at_rule && n[:name] == 'font-face' @nodes_by_type[:images_rules] << n if n[:node] == :style_rule end unless @nodes_by_type[:images_rules].nil? @nodes_by_type[:images_rules].map! { |n| n[:children] }.flatten! @nodes_by_type[:images_rules] = @nodes_by_type[:images_rules].select do |n| n[:node] == :property && (n[:name] == 'background' || n[:name] == 'background-image') end end @nodes_by_type end
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 96 def parse_nodes Crass.parse css end
Source
# File lib/applitools/selenium/css_parser/find_embedded_resources.rb, line 35 def url(node) result = [] node[:tokens].select { |t| t[:node] == :url }.uniq.each do |nd| result << nd[:value] if nd && !nd.empty? end node[:tokens].select { |t| t[:node] == :function && t[:value] == 'url' }.uniq.each do |nd| url_index = node[:tokens].index(nd) url_string_node = url_index && node[:tokens][url_index + 1] result << ( url_string_node && url_string_node[:node] == :string && !url_string_node[:value].empty? && url_string_node[:value] ) end result.compact end