esvg 4.3.0 → 4.3.1
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/lib/esvg/svg.rb +8 -5
- data/lib/esvg/symbol.rb +29 -39
- data/lib/esvg/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4677251f95c7f1ab30e85a77dbbaecd683703680
|
|
4
|
+
data.tar.gz: f6dcf98027aab09923f34ad3d5065a3a29ed7128
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 43e0f618e64866961bc89de0f376e5caa1ec8d68f3f990a286552cdc67b959431c1ddd401599a45c2496c56d831b34a77955753a4700bcbf00df0db6efe959cb
|
|
7
|
+
data.tar.gz: 7ab9ce67fd94776ed55a7004a607bf76ddbfc69ecf6c6580e6cdcfe380217e4a4d1cee48edac794f7d45f290584f663c49d914c5fe86632a5afe585a5bc1bb09
|
data/lib/esvg/svg.rb
CHANGED
|
@@ -11,6 +11,7 @@ module Esvg
|
|
|
11
11
|
@name = name
|
|
12
12
|
@config = config
|
|
13
13
|
@symbols = symbols
|
|
14
|
+
@symbol_defs = []
|
|
14
15
|
@asset = File.basename(name).start_with?('_')
|
|
15
16
|
@version = @config[:version] || Digest::MD5.hexdigest(symbols.map(&:mtime).join)
|
|
16
17
|
end
|
|
@@ -65,10 +66,6 @@ module Esvg
|
|
|
65
66
|
end
|
|
66
67
|
end
|
|
67
68
|
|
|
68
|
-
def optimize
|
|
69
|
-
@symbols.map(&:optimize).join.gsub("\n",'')
|
|
70
|
-
end
|
|
71
|
-
|
|
72
69
|
def svg
|
|
73
70
|
attr = {
|
|
74
71
|
"data-symbol-class" => @config[:class],
|
|
@@ -76,7 +73,13 @@ module Esvg
|
|
|
76
73
|
"version" => "1.1",
|
|
77
74
|
"style" => "height:0;position:absolute"
|
|
78
75
|
}
|
|
79
|
-
|
|
76
|
+
|
|
77
|
+
defs = @symbols.map(&:defs).compact.join
|
|
78
|
+
defs = "<defs>#{defs}</defs>" unless defs.empty?
|
|
79
|
+
|
|
80
|
+
optimized = @symbols.map(&:optimize).join.gsub("\n",'')
|
|
81
|
+
|
|
82
|
+
%Q{<svg id="esvg-#{id}" #{attributes(attr)}>#{defs}#{optimized}</svg>}
|
|
80
83
|
end
|
|
81
84
|
|
|
82
85
|
end
|
data/lib/esvg/symbol.rb
CHANGED
|
@@ -2,7 +2,7 @@ require 'open3'
|
|
|
2
2
|
|
|
3
3
|
module Esvg
|
|
4
4
|
class Symbol
|
|
5
|
-
attr_reader :name, :id, :path, :content, :optimized, :size, :group, :mtime
|
|
5
|
+
attr_reader :name, :id, :path, :content, :optimized, :size, :group, :mtime, :defs
|
|
6
6
|
|
|
7
7
|
include Esvg::Utils
|
|
8
8
|
|
|
@@ -17,25 +17,24 @@ module Esvg
|
|
|
17
17
|
return if !File.exist?(@path)
|
|
18
18
|
|
|
19
19
|
time = last_modified
|
|
20
|
-
if @mtime != time
|
|
21
|
-
@mtime = time
|
|
22
|
-
@content = pre_optimize File.read(@path)
|
|
23
|
-
@size = dimensions
|
|
24
|
-
@optimized = nil
|
|
25
|
-
@optimized_at = nil
|
|
26
|
-
end
|
|
27
20
|
|
|
28
21
|
# Ensure that cache optimization matches current optimization settings
|
|
29
22
|
# If config has changed name, reset optimized build (name gets baked in)
|
|
30
|
-
if @svgo_optimized != svgo? || name != file_name
|
|
23
|
+
if @mtime != time || @svgo_optimized != svgo? || name != file_name
|
|
31
24
|
@optimized = nil
|
|
32
25
|
@optimized_at = nil
|
|
33
26
|
end
|
|
34
|
-
|
|
27
|
+
|
|
35
28
|
@group = dir_key
|
|
36
29
|
@name = file_name
|
|
37
30
|
@id = file_id file_key
|
|
38
31
|
|
|
32
|
+
if @mtime != time
|
|
33
|
+
@content = prep_defs pre_optimize File.read(@path)
|
|
34
|
+
@mtime = time
|
|
35
|
+
@size = dimensions
|
|
36
|
+
end
|
|
37
|
+
|
|
39
38
|
self
|
|
40
39
|
end
|
|
41
40
|
|
|
@@ -56,6 +55,7 @@ module Esvg
|
|
|
56
55
|
mtime: @mtime,
|
|
57
56
|
size: @size,
|
|
58
57
|
content: @content,
|
|
58
|
+
defs: @defs,
|
|
59
59
|
optimized: @optimized,
|
|
60
60
|
optimized_at: @optimized_at,
|
|
61
61
|
svgo_optimized: svgo? && @svgo_optimized
|
|
@@ -138,8 +138,6 @@ module Esvg
|
|
|
138
138
|
return @optimized if @optimized && @optimized_at > @mtime
|
|
139
139
|
|
|
140
140
|
@optimized = @content
|
|
141
|
-
sub_def_ids
|
|
142
|
-
move_defs
|
|
143
141
|
|
|
144
142
|
if svgo?
|
|
145
143
|
response = Open3.capture3(%Q{#{Esvg.node_module('svgo')} --disable=removeUselessDefs -s '#{@optimized}' -o -})
|
|
@@ -227,6 +225,7 @@ module Esvg
|
|
|
227
225
|
end
|
|
228
226
|
|
|
229
227
|
def pre_optimize(svg)
|
|
228
|
+
|
|
230
229
|
# Generate a regex of attributes to be removed
|
|
231
230
|
att = Regexp.new %w(xmlns xmlns:xlink xml:space version).map { |m| "#{m}=\".+?\"" }.join('|')
|
|
232
231
|
|
|
@@ -244,7 +243,6 @@ module Esvg
|
|
|
244
243
|
def post_optimize
|
|
245
244
|
@optimized = set_attributes
|
|
246
245
|
.gsub(/<\/svg/,'</symbol') # Replace svgs with symbols
|
|
247
|
-
.gsub(/class="def-/,'id="def-') # Replace <def> classes with ids (classes are generated in sub_def_ids)
|
|
248
246
|
.gsub(/\w+=""/,'') # Remove empty attributes
|
|
249
247
|
end
|
|
250
248
|
|
|
@@ -261,36 +259,28 @@ module Esvg
|
|
|
261
259
|
# Only replace IDs if urls exist to avoid replacing defs
|
|
262
260
|
# used in other svg files
|
|
263
261
|
#
|
|
264
|
-
def
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
else
|
|
282
|
-
@optimized = @optimized.gsub /id="#{id}"/, %Q{class="#{id}"}
|
|
262
|
+
def prep_defs(svg)
|
|
263
|
+
|
|
264
|
+
# <defs> should be moved to the beginning of the SVG file for braod browser support. Ahem, Firefox ಠ_ಠ
|
|
265
|
+
# When symbols are reassembled, @defs will be added back
|
|
266
|
+
|
|
267
|
+
if @defs = svg.scan(/<defs>(.+)<\/defs>/m).flatten[0]
|
|
268
|
+
svg.sub!("<defs>#{@defs}</defs>", '')
|
|
269
|
+
@defs.gsub!(/(\n|\s{2,})/,'')
|
|
270
|
+
|
|
271
|
+
@defs.scan(/id="(.+?)"/).flatten.uniq.each_with_index do |id, index|
|
|
272
|
+
|
|
273
|
+
# If there are urls matching def ids
|
|
274
|
+
if svg.match(/url\(##{id}\)/)
|
|
275
|
+
|
|
276
|
+
new_id = "def-#{@id}-#{index}" # Generate a unique id
|
|
277
|
+
@defs.gsub!(/id="#{id}"/, %Q{id="#{new_id}"}) # Replace the def ids
|
|
278
|
+
svg.gsub!(/url\(##{id}\)/, "url(##{new_id})") # Replace url references to these old def ids
|
|
283
279
|
end
|
|
284
280
|
end
|
|
285
281
|
end
|
|
286
|
-
end
|
|
287
282
|
|
|
288
|
-
|
|
289
|
-
def move_defs
|
|
290
|
-
if defs = @optimized.scan(/(\s*<defs>.+<\/defs>\s*)/m).flatten[0]
|
|
291
|
-
@optimized.sub!(defs, '')
|
|
292
|
-
@optimized.sub!(/(<svg.+?>)/, "\1#{defs}")
|
|
293
|
-
end
|
|
283
|
+
svg
|
|
294
284
|
end
|
|
295
285
|
end
|
|
296
286
|
end
|
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.3.
|
|
4
|
+
version: 4.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brandon Mathis
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-06-
|
|
11
|
+
date: 2017-06-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|