sprite-factory-custom 1.6.1 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c2ecbb8bb1a7ec8be758af9d13a03ce6b1959276
4
- data.tar.gz: c52c5bfc4a5d35d4baf4b6e4baef9ba896da1822
3
+ metadata.gz: 01d3b01280973bccc764b752828e05df00aec623
4
+ data.tar.gz: f72a6e66a2418e791de99c2958f2d83b2863a625
5
5
  SHA512:
6
- metadata.gz: 8732914483a9497b38074802e423b845b8474cd278fac7ae37dd038a06ba2f9226cd4c39a06ae03aaaeb5e54b8eca8cef8bf9621a5de68b1fff4fc5777651c25
7
- data.tar.gz: dd3ee2dde1633ebb0a4d83758423d3ecdaf9abce7fdd9053b2cd6205bef13dbeebb8e19a5f351aac1f92e62c2d472a54942ba2f832107fae646a07af299c1438
6
+ metadata.gz: df91210723d163fb6a5638627d8e21094b46f389723a077f9a5001c1a02b7dc384e4d46783a4599ce0069ecf4a0163aa0150723f0d214cc3f31103f5cef2e669
7
+ data.tar.gz: 77904ece1613fa8ca9c673c8dae89b5556b8248d2f3d40cd39bb8089e5aace7a4983fa1123371dc02a1b9a314fcb8500ae728b627f742d50094ff20d2d90f9a1
data/bin/sf CHANGED
@@ -31,6 +31,7 @@ padding_help = "add padding to each sprite"
31
31
  margin_help = "add margin to each sprite"
32
32
  nocomments_help = "suppress comments in generated stylesheet"
33
33
  custom_styles_help = "Add custom styles for each sprites (E.g.: --custom-styles='display: inline-block;'"
34
+ retina_help = "create 50% smaller images & css as well"
34
35
 
35
36
  op.on("--layout [ORIENTATION]", layout_help) {|value| options[:layout] = value }
36
37
  op.on("--style [STYLE]", style_help) {|value| options[:style] = value }
@@ -44,6 +45,7 @@ op.on("--pngcrush", pngcrush_help) {|value| options[:pngcr
44
45
  op.on("--padding [PIXELS]", padding_help) {|value| options[:padding] = value.to_i }
45
46
  op.on("--margin [PIXELS]", margin_help) {|value| options[:margin] = value.to_i }
46
47
  op.on("--nocomments", nocomments_help) {|value| options[:nocomments] = true }
48
+ op.on("--retina", retina_help) {|value| options[:retina] = true }
47
49
 
48
50
  begin
49
51
  op.parse!(ARGV)
@@ -2,9 +2,9 @@ module SpriteFactory
2
2
 
3
3
  #----------------------------------------------------------------------------
4
4
 
5
- VERSION = "1.6.1"
5
+ VERSION = "1.6.2"
6
6
  SUMMARY = "Automatic CSS sprite generator"
7
- DESCRIPTION = "[tam-vo/sprite-factory] Combines individual images from a directory into a single sprite image file and creates an appropriate CSS stylesheet"
7
+ DESCRIPTION = "[tam-vo/sprite-factory v#{VERSION}] Combines individual images from a directory into a single sprite image file and creates an appropriate CSS stylesheet"
8
8
  LIB = File.dirname(__FILE__)
9
9
 
10
10
  autoload :Runner, File.join(LIB, 'sprite_factory/runner') # controller that glues everything together
@@ -12,7 +12,7 @@ module SpriteFactory
12
12
 
13
13
  attr :input
14
14
  attr :config
15
-
15
+
16
16
  def initialize(input, config = {})
17
17
  @input = input.to_s[-1] == "/" ? input[0...-1] : input # gracefully ignore trailing slash on input directory name
18
18
  @config = config
@@ -25,7 +25,7 @@ module SpriteFactory
25
25
  @config[:pngcrush] ||= SpriteFactory.pngcrush
26
26
  @config[:nocomments] ||= SpriteFactory.nocomments
27
27
  end
28
-
28
+
29
29
  #----------------------------------------------------------------------------
30
30
 
31
31
  def run!(&block)
@@ -55,7 +55,9 @@ module SpriteFactory
55
55
 
56
56
  css = []
57
57
  css << style_comment(header) unless nocomments? # header comment
58
- css << style(selector, css_url, images, &block) # generated styles
58
+ css << retina_wrapper_start() if retina? # if retina images
59
+ css << style(selector, css_url, images, max, &block) # generated styles
60
+ css << retina_wrapper_end() if retina? # if retina images
59
61
  css << IO.read(custom_style_file) if File.exists?(custom_style_file) # custom styles
60
62
  css = css.join("\n")
61
63
 
@@ -67,6 +69,8 @@ module SpriteFactory
67
69
  css_file.close
68
70
  end
69
71
 
72
+
73
+
70
74
  if config[:return] == :images
71
75
  images # if caller explicitly asked for detailed images hash instead of generated CSS
72
76
  else
@@ -76,9 +80,13 @@ module SpriteFactory
76
80
  end
77
81
 
78
82
  #----------------------------------------------------------------------------
79
-
83
+
80
84
  private
81
85
 
86
+ def retina?
87
+ config[:retina]
88
+ end
89
+
82
90
  def selector
83
91
  config[:selector]
84
92
  end
@@ -227,8 +235,8 @@ module SpriteFactory
227
235
 
228
236
  #----------------------------------------------------------------------------
229
237
 
230
- def style(selector, url, images, &block)
231
- defaults = Style.generate(style_name, selector, url, images, custom_styles) # must call, even if custom block is given, because it stashes generated css style into image[:style] attributes
238
+ def style(selector, url, images, max, &block)
239
+ defaults = Style.generate(style_name, selector, url, images, custom_styles, config, max) # must call, even if custom block is given, because it stashes generated css style into image[:style] attributes
232
240
  if block_given?
233
241
  yield images.inject({}) {|h,i| h[i[:name].to_sym] = i; h} # provide custom rule builder a hash by image name
234
242
  else
@@ -240,6 +248,14 @@ module SpriteFactory
240
248
  Style.comment(style_name, comment)
241
249
  end
242
250
 
251
+ def retina_wrapper_start
252
+ Style.retina_wrapper_start
253
+ end
254
+
255
+ def retina_wrapper_end
256
+ Style.retina_wrapper_end
257
+ end
258
+
243
259
  #----------------------------------------------------------------------------
244
260
 
245
261
  SUPPORTS_PNGCRUSH = !`which pngcrush`.empty? rescue false # rescue on environments without `which` (windows)
@@ -248,7 +264,7 @@ module SpriteFactory
248
264
  if SUPPORTS_PNGCRUSH && config[:pngcrush]
249
265
  crushed = "#{image}.crushed"
250
266
  `pngcrush -rem alla -reduce -brute #{image} #{crushed}`
251
- FileUtils.mv(crushed, image)
267
+ FileUtils.mv(crushed, image)
252
268
  end
253
269
  end
254
270
 
@@ -15,6 +15,14 @@ module SpriteFactory
15
15
  return "/*\n#{comment}\n*/"
16
16
  end
17
17
 
18
+ def self.retina_style_start
19
+ "@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) {"
20
+ end
21
+
22
+ def self.retina_style_end
23
+ "}"
24
+ end
25
+
18
26
  #----------------------------------------------------------------------------
19
27
 
20
28
  def self.scss(selector, name, attributes)
@@ -45,18 +53,21 @@ module SpriteFactory
45
53
 
46
54
  #----------------------------------------------------------------------------
47
55
 
48
- def self.generate(style_name, selector, url, images, custom_styles="")
56
+ def self.generate(style_name, selector, url, images, custom_styles, config, max)
49
57
  styles = []
58
+ divider = config[:retina] ? 2 : 1
50
59
  images.each do |image|
60
+ puts "DIV #{divider}"
51
61
  attr = [
52
- "width: #{image[:cssw]}px",
53
- "height: #{image[:cssh]}px",
54
- "background: #{url} #{-image[:cssx]}px #{-image[:cssy]}px no-repeat",
62
+ "width: #{image[:cssw] / divider}px",
63
+ "height: #{image[:cssh] / divider}px",
64
+ "background: #{url} #{-image[:cssx] / divider}px #{-image[:cssy] / divider}px no-repeat",
55
65
  custom_styles
56
66
  ]
67
+ attr << "background-size: #{max[:width]/2}px #{max[:height]/2}px" if config[:retina]
57
68
  image[:selector] = selector # make selector available for (optional) custom rule generators
58
69
  image[:style] = send("#{style_name}_style", attr) # make pure style available for (optional) custom rule generators (see usage of yield inside Runner#style)
59
- styles << send(style_name, selector, image[:name], attr)
70
+ styles << send(style_name, selector, image[:name].gsub('@2x', ''), attr)
60
71
  end
61
72
  styles << ""
62
73
  styles.join("\n")
@@ -70,5 +81,13 @@ module SpriteFactory
70
81
 
71
82
  #----------------------------------------------------------------------------
72
83
 
84
+ def self.retina_wrapper_start
85
+ send('retina_style_start')
86
+ end
87
+
88
+ def self.retina_wrapper_end
89
+ send('retina_style_end')
90
+ end
91
+
73
92
  end
74
93
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprite-factory-custom
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 1.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Gordon
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-18 00:00:00.000000000 Z
12
+ date: 2014-04-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rmagick
@@ -39,7 +39,7 @@ dependencies:
39
39
  - - '>='
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
- description: '[tam-vo/sprite-factory] Combines individual images from a directory
42
+ description: '[tam-vo/sprite-factory v1.6.2] Combines individual images from a directory
43
43
  into a single sprite image file and creates an appropriate CSS stylesheet'
44
44
  email:
45
45
  - jake@codeincomplete.com