Class: Stylesheet::Compiler

Inherits:
Object
  • Object
show all
Defined in:
lib/stylesheet/compiler.rb

Constant Summary collapse

ASSET_ROOT =
"#{Rails.root}/app/assets/stylesheets"

Class Method Summary collapse

Class Method Details

.compile(stylesheet, filename, options = {}) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/stylesheet/compiler.rb', line 45

def self.compile(stylesheet, filename, options = {})
  source_map_file = options[:source_map_file] || "#{filename.sub(".scss", "")}.css.map"

  load_paths = [ASSET_ROOT]
  load_paths += options[:load_paths] if options[:load_paths]

  engine =
    SassC::Engine.new(
      stylesheet,
      filename: filename,
      style: :compressed,
      source_map_file: source_map_file,
      source_map_contents: true,
      load_paths: load_paths,
      validate_source_map_path: false,
    )

  result = engine.render

  if options[:rtl]
    require "rtlcss"
    [Rtlcss.flip_css(result), nil]
  else
    source_map = engine.source_map
    source_map.force_encoding("UTF-8")

    [result, source_map]
  end
end

.compile_asset(asset, options = {}) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/stylesheet/compiler.rb', line 9

def self.compile_asset(asset, options = {})
  importer = Importer.new(options)
  file = importer.prepended_scss

  if Importer::THEME_TARGETS.include?(asset.to_s)
    filename = "theme_#{options[:theme_id]}.scss"
    file += options[:theme_variables].to_s
    file += importer.theme_import(asset)
  elsif plugin_assets = Importer.plugin_assets[asset.to_s]
    filename = "#{asset.to_s}.scss"
    options[:load_paths] = [] if options[:load_paths].nil?
    plugin_assets.each do |src|
      file += File.read src
      options[:load_paths] << File.expand_path(File.dirname(src))
    end
  else
    filename = "#{asset}.scss"
    path = "#{ASSET_ROOT}/#{filename}"
    file += File.read path

    case asset.to_s
    when "embed", "publish"
      file += importer.font
    when "wizard"
      file += importer.wizard_fonts
    when Stylesheet::Manager::COLOR_SCHEME_STYLESHEET
      file += importer.import_color_definitions
      file += importer.import_wcag_overrides
      file += importer.category_backgrounds
      file += importer.font
    end
  end

  compile(file, filename, options)
end