esvg 4.4.3 → 4.5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/esvg/symbol.rb +49 -12
- data/lib/esvg/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09c5c765988ce0a64353406948e42d7d97d4c5b7326ae4d8531987d98650f510'
|
4
|
+
data.tar.gz: 63248c8391f17ec3d197f2ef525e88d9e84f67415a9e85e0b2b7d3533764f3dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a480482a7aa333789dee900e968fae4930998f06da35af24f18238253302542caf542748707898140d0fac81c658f01330e5625751583c62f51d946594202c5
|
7
|
+
data.tar.gz: 53016c37c452c2adb00234baa5d98a9c6e059373136dba962b26864bac3da8512e0c9cf77f973857a002b2ae3c7bda6235866727d001610e3bd511d038632ced
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
### 4.5.0 (2018-12-11)
|
4
|
+
- New: width and height will be scaled proportionately. So passing only `width: 50` will set height proportionately based on original svg dimensions.
|
5
|
+
- To disable automatic calculation pass `scale: true`.
|
6
|
+
- Units are supported, so `height: 1em` will find the proper `em` based proportion for width.
|
7
|
+
|
3
8
|
### 4.4.3 (2018-12-09)
|
4
9
|
- IE 10 compatibility fix: Replaced self-closing `<use>` tag with close tag version.
|
5
10
|
- IE 10 compatibility fix: Using `forEach` instead of `for var of` because IE 10 is garbage. ¯\_(ツ)_/¯
|
data/lib/esvg/symbol.rb
CHANGED
@@ -45,6 +45,41 @@ module Esvg
|
|
45
45
|
@size[:height]
|
46
46
|
end
|
47
47
|
|
48
|
+
# Scale width based on propotion to height
|
49
|
+
def scale_width( h )
|
50
|
+
s = split_unit( h )
|
51
|
+
"#{( s[:size] / height * width ).round(2)}#{s[:unit]}"
|
52
|
+
end
|
53
|
+
|
54
|
+
# Scale height based on propotion to width
|
55
|
+
def scale_height( w )
|
56
|
+
s = split_unit( w )
|
57
|
+
"#{( s[:size] / width * height ).round(2)}#{s[:unit]}"
|
58
|
+
end
|
59
|
+
|
60
|
+
# Separate size and unit for easier math.
|
61
|
+
# Returns: { size: 10, unit: 'px' }
|
62
|
+
def split_unit( size )
|
63
|
+
m = size.to_s.match(/(\d+)\s*(\D*)/)
|
64
|
+
{ size: m[1].to_f, unit: m[2] }
|
65
|
+
end
|
66
|
+
|
67
|
+
def scale( a )
|
68
|
+
# Width was set, determine scaled height
|
69
|
+
if a[:width]
|
70
|
+
a[:height] ||= scale_height( a[:width] )
|
71
|
+
# Height was set, determine scaled width
|
72
|
+
elsif a[:height]
|
73
|
+
a[:width] ||= scale_width( a[:height] )
|
74
|
+
# Nothing was set, default to dimensions
|
75
|
+
else
|
76
|
+
a[:width] = width
|
77
|
+
a[:height] = height
|
78
|
+
end
|
79
|
+
|
80
|
+
a
|
81
|
+
end
|
82
|
+
|
48
83
|
def data
|
49
84
|
{
|
50
85
|
path: @path,
|
@@ -84,24 +119,26 @@ module Esvg
|
|
84
119
|
role: 'img'
|
85
120
|
}.merge(options)
|
86
121
|
|
87
|
-
|
88
|
-
|
89
|
-
svg_attr
|
90
|
-
|
122
|
+
if svg_attr[:scale]
|
123
|
+
# User doesn't want dimensions to be set
|
124
|
+
svg_attr.delete(:scale)
|
125
|
+
else
|
126
|
+
# Scale dimensions based on attributes
|
127
|
+
svg_attr = scale( svg_attr )
|
91
128
|
end
|
92
129
|
|
93
|
-
svg_attr.delete(:scale)
|
94
|
-
|
95
130
|
%Q{<svg #{attributes(svg_attr)}>#{use_tag(use_attr)}#{content}</svg>}
|
96
131
|
end
|
97
132
|
|
98
133
|
def use_tag(options={})
|
99
134
|
options["xlink:href"] = "##{@id}"
|
100
135
|
|
101
|
-
|
102
|
-
|
103
|
-
options
|
104
|
-
|
136
|
+
if options[:scale] && @config[:scale]
|
137
|
+
# User doesn't want dimensions to be set
|
138
|
+
options.delete(:scale)
|
139
|
+
else
|
140
|
+
# Scale dimensions based on attributes
|
141
|
+
options = scale( options )
|
105
142
|
end
|
106
143
|
|
107
144
|
options.delete(:scale)
|
@@ -121,7 +158,7 @@ module Esvg
|
|
121
158
|
|
122
159
|
@optimized = @content
|
123
160
|
|
124
|
-
if svgo?
|
161
|
+
if svgo?
|
125
162
|
response = Open3.capture3(%Q{#{Esvg.node_module('svgo')} --disable=removeUselessDefs -s '#{@optimized}' -o -})
|
126
163
|
if !response[0].empty? && response[2].success?
|
127
164
|
@optimized = response[0]
|
@@ -255,7 +292,7 @@ module Esvg
|
|
255
292
|
|
256
293
|
# <defs> should be moved to the beginning of the SVG file for braod browser support. Ahem, Firefox ಠ_ಠ
|
257
294
|
# When symbols are reassembled, @defs will be added back
|
258
|
-
|
295
|
+
|
259
296
|
if @defs = svg.scan(/<defs>(.+)<\/defs>/m).flatten[0]
|
260
297
|
svg.sub!("<defs>#{@defs}</defs>", '')
|
261
298
|
@defs.gsub!(/(\n|\s{2,})/,'')
|
data/lib/esvg/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: esvg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Mathis
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|