Class: RailsSprite::StylesheetGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_sprite/stylesheet_generator.rb

Class Method Summary collapse

Class Method Details

.composite_css_scss(result) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/rails_sprite/stylesheet_generator.rb', line 59

def self.composite_css_scss result
  styles = []

  styles << <<-END_CSS
// 将下面3行,放入页面中(仅供参考)
// .#{result[:css_class_shared]} {
//   background-image: url(<%= image_path("#{result[:image_scope_name]}") %>);
// }
END_CSS

  styles << <<-END_CSS
.#{result[:css_class_shared]} {
  background-repeat: no-repeat;
  background-size: #{result[:background_x]}px #{result[:background_y]}px;
}
END_CSS

  result[:styles].each do |style|
    styles << <<-END_CSS
.#{style[:class]} {
  background-position: #{style[:x]} -#{style[:y]};
  height: #{style[:height]};
  width: #{style[:width]};
}
    END_CSS
  end

  styles.join("\n")
end

.composite_css_scss_erb(result) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/rails_sprite/stylesheet_generator.rb', line 89

def self.composite_css_scss_erb result
  styles = []

  styles << <<-END_CSS
.#{result[:css_class_shared]} {
  background-image: url(<%= image_path("#{result[:image_scope_name]}") %>);
  background-repeat: no-repeat;
  background-size: #{result[:background_x]}px #{result[:background_y]}px;
}
END_CSS

  result[:styles].each do |style|
    styles << <<-END_CSS
.#{style[:class]} {
  background-position: #{style[:x]} -#{style[:y]};
  height: #{style[:height]};
  width: #{style[:width]};
}
    END_CSS


#  .#{style[:class]} {
#    background: url(<%= image_path("#{result[:image_scope_name]}") %>) #{style[:x]} -#{style[:y]} no-repeat;
#  }
  end

  styles.join("\n")
end

.generate(options = {}) ⇒ Object



4
5
6
7
8
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/rails_sprite/stylesheet_generator.rb', line 4

def self.generate options={}
  zoom = options.fetch(:zoom, 1).to_i
  css_class_prefix = options[:css_class_prefix]
  css_class_shared = options[:css_class_shared]
  css_extend = options[:css_extend] 
  image_scope_name = options[:image_scope_name]
  file_infos = options[:file_infos]
  stylesheet_to = options[:stylesheet_to]

  result = {}
  styles = []

  file_infos.each do |file_info|
    style = {}

    style[:width] = "#{file_info[:width] / zoom}px"
    style[:height] = "#{file_info[:height] / zoom}px"
    style[:x] = "#{file_info[:x] / zoom}px"
    style[:y] = "#{file_info[:y] / zoom}px"
    style[:class] = "#{css_class_prefix}#{file_info[:file_purename]}"

    styles << style
  end

  result[:styles] = styles
  result[:image_scope_name] = image_scope_name
  result[:css_class_shared] = css_class_shared

  ## 高度取总和
  result[:background_y] = file_infos.map do |file_info|
    file_info[:height]
  end.sum / zoom

  ## 宽度取最大值
  result[:background_x] = file_infos.map do |file_info|
    file_info[:width]
  end.max / zoom

  css_filt_content = case css_extend
                     when '.css.scss.erb', '.scss.erb'
                       composite_css_scss_erb(result)
                     when '.css', '.scss'
                       composite_css_scss(result)
                     else
                     end

  system "mkdir -p #{::File.dirname(stylesheet_to)}"

  ::File.open(stylesheet_to, 'w') do |file|
    file.write( css_filt_content )
  end

  result
end