spriter 0.10.0 → 0.12.0
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.
- 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
|
|