spriter 0.10.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rack/spriter.rb +6 -1
- data/lib/spriter.rb +19 -10
- metadata +16 -4
data/lib/rack/spriter.rb
CHANGED
@@ -10,6 +10,7 @@ module Rack
|
|
10
10
|
@app = app
|
11
11
|
@stylesheets_path = options[:stylesheets_path]
|
12
12
|
@stylesheets_url_pattern = options[:stylesheets_url_pattern]
|
13
|
+
@images = []
|
13
14
|
::Spriter.assets_path = options[:assets_path]
|
14
15
|
::Spriter.sprite_image_path = options[:sprite_image_path]
|
15
16
|
::Spriter.sprite_image_url = options[:sprite_image_url]
|
@@ -56,8 +57,12 @@ module Rack
|
|
56
57
|
|
57
58
|
if @generated_css.nil? or files.max{ |a,b| a.mtime <=> b.mtime }.mtime > @generated_at
|
58
59
|
names = paths.map{ |p| p.sub(/\.spriter$/, '').sub(/^#{@stylesheets_path}\//, '') }
|
59
|
-
|
60
|
+
|
61
|
+
spriter = ::Spriter.new
|
62
|
+
css = spriter.transform(*(files + [@images]))
|
60
63
|
css = [css] unless css.is_a? Array
|
64
|
+
|
65
|
+
@images = spriter.images
|
61
66
|
@generated_at = Time.now
|
62
67
|
@generated_css = Hash[*names.zip(css).flatten]
|
63
68
|
end
|
data/lib/spriter.rb
CHANGED
@@ -7,20 +7,28 @@ class Spriter
|
|
7
7
|
attr_accessor :sprite_image_url
|
8
8
|
|
9
9
|
def transform(*args)
|
10
|
-
new
|
10
|
+
new.transform(*args)
|
11
11
|
end
|
12
12
|
|
13
13
|
def transform_files(*args)
|
14
|
-
new
|
14
|
+
new.transform_files(*args)
|
15
15
|
end
|
16
16
|
|
17
17
|
def image_dimensions(path)
|
18
|
-
|
19
|
-
|
18
|
+
if path =~ /\.png$/
|
19
|
+
IO.read(path)[0x10..0x18].unpack('NN')
|
20
|
+
elsif path =~ /\.gif$/
|
21
|
+
IO.read(path)[6..10].unpack('SS')
|
22
|
+
else
|
23
|
+
magick_image = MiniMagick::Image.from_file(path)
|
24
|
+
[ magick_image[:width], magick_image[:height] ]
|
25
|
+
end
|
20
26
|
end
|
21
27
|
end
|
22
28
|
|
23
|
-
|
29
|
+
attr_reader :images
|
30
|
+
|
31
|
+
def initialize(assets_path = Spriter.assets_path, sprite_image_path = Spriter.sprite_image_path, sprite_image_url = Spriter.sprite_image_url)
|
24
32
|
@assets_path, @sprite_image_path, @sprite_image_url = assets_path, sprite_image_path, sprite_image_url
|
25
33
|
@images = []
|
26
34
|
@y_offsets = {}
|
@@ -28,19 +36,20 @@ class Spriter
|
|
28
36
|
end
|
29
37
|
|
30
38
|
def transform(*inputs)
|
39
|
+
previous_image_list = inputs.last.is_a?(Array) ? inputs.pop : []
|
40
|
+
|
31
41
|
image_matcher = /([^a-z])-spriter-background:\s*([^;\}]+)([;\}])/
|
32
42
|
new_css = inputs.inject([]) do |new_css, css|
|
33
43
|
css = css.read if css.respond_to? :read
|
34
44
|
new_css << css.gsub(image_matcher) do |matched|
|
35
|
-
indent = $1
|
36
|
-
|
37
|
-
image = $2.strip.gsub(/(?:^['"]|['"]$)/, '')
|
45
|
+
indent, image, terminator = $1, $2, $3
|
46
|
+
image = image.strip.gsub(/(?:^['"]|['"]$)/, '')
|
38
47
|
add_image(image)
|
39
48
|
"#{indent}background: url(#{@sprite_image_url}) no-repeat 0 #{-y_offset(image)}#{y_offset(image) == 0 ? '' : 'px'}#{terminator} /* #{image} */"
|
40
49
|
end
|
41
50
|
end
|
42
51
|
|
43
|
-
generate_sprite_image
|
52
|
+
generate_sprite_image unless @images == previous_image_list
|
44
53
|
|
45
54
|
if new_css.length == 1
|
46
55
|
new_css.first
|
@@ -70,7 +79,7 @@ class Spriter
|
|
70
79
|
end
|
71
80
|
|
72
81
|
def y_offset(image)
|
73
|
-
@y_offsets[image] or raise ArgumentError,
|
82
|
+
@y_offsets[image] or raise ArgumentError, "Unknown image (#{image})\nKnown images are: #{@images.join(', ')}"
|
74
83
|
end
|
75
84
|
|
76
85
|
def generate_sprite_image
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 12
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.12.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Reevoo
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-08-05 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -41,6 +41,18 @@ dependencies:
|
|
41
41
|
version: "0"
|
42
42
|
type: :development
|
43
43
|
version_requirements: *id002
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: mocha
|
46
|
+
prerelease: false
|
47
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
version: "0"
|
54
|
+
type: :development
|
55
|
+
version_requirements: *id003
|
44
56
|
description:
|
45
57
|
email:
|
46
58
|
executables: []
|
@@ -83,6 +95,6 @@ rubyforge_project:
|
|
83
95
|
rubygems_version: 1.3.6
|
84
96
|
signing_key:
|
85
97
|
specification_version: 3
|
86
|
-
summary:
|
98
|
+
summary: Makes CSS sprites easy.
|
87
99
|
test_files: []
|
88
100
|
|