Class: Csspin::CssImportsInliner

Inherits:
Object
  • Object
show all
Defined in:
lib/csspin/css_imports_inliner.rb

Constant Summary collapse

IMPORT_RE =
/\A\s*@import\s+(?:url\(\s*)?["'](?<path>[^"']+)["']\s*\)?\s*(?<media>[^;]*);\s*\z/

Instance Method Summary collapse

Constructor Details

#initialize(downloader:) ⇒ CssImportsInliner

Returns a new instance of CssImportsInliner.



9
10
11
# File 'lib/csspin/css_imports_inliner.rb', line 9

def initialize(downloader:)
  @downloader = downloader
end

Instance Method Details

#inline(css, base_url:, import_stack: []) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/csspin/css_imports_inliner.rb', line 13

def inline(css, base_url:, import_stack: [])
  return css unless css.include?("@import")

  out = +""

  css.each_line do |line|
    match = IMPORT_RE.match(line)

    out << if match && relative_css_path?(match[:path]) && match[:media].to_s.strip.empty?
      fetch_css(base_url, match[:path], import_stack)
    else
      line
    end
  end

  out
end