class Roadie::UrlRewriter
Class that rewrites URLs in the DOM.
@api private
def generate_url(*args) @generator.generate_url(*args) end
def generate_url(*args) @generator.generate_url(*args) end
def initialize(generator)
-
generator
(UrlGenerator
) --
def initialize(generator) @generator = generator end
def transform_css(css)
-
(String)
- copy of css that is mutated
Parameters:
-
css
(String
) -- the css to mutate
def transform_css(css) css.gsub(CSS_URL_REGEXP) do matches = Regexp.last_match "url(#{matches[:quote]}#{generate_url(matches[:url])}#{matches[:quote]})" end end
def transform_dom(dom)
-
(nil)
- DOM tree is mutated
Parameters:
-
dom
(Nokogiri::HTML::Document
) --
def transform_dom(dom) # Use only a single loop to do this dom.css( "a[href]:not([data-roadie-ignore]), " \ "img[src]:not([data-roadie-ignore]), " \ "*[style]:not([data-roadie-ignore])", ).each do |element| transform_element_style element if element.has_attribute?('style') transform_element element end nil end
def transform_element(element)
def transform_element(element) case element.name when "a" then element["href"] = generate_url element["href"] when "img" then element["src"] = generate_url element["src"] end end
def transform_element_style(element)
def transform_element_style(element) # We need to use a setter for Nokogiri to detect the string mutation. # If nokogiri used "dumber" data structures, this would all be redundant. css = element["style"] element["style"] = transform_css(css) end