lib/esvg/symbol.rb in esvg-4.2.5 vs lib/esvg/symbol.rb in esvg-4.3.0
- old
+ new
@@ -137,10 +137,11 @@
# Only optimize again if the file has changed
return @optimized if @optimized && @optimized_at > @mtime
@optimized = @content
sub_def_ids
+ move_defs
if svgo?
response = Open3.capture3(%Q{#{Esvg.node_module('svgo')} --disable=removeUselessDefs -s '#{@optimized}' -o -})
if !response[0].empty? && response[2].success?
@optimized = response[0]
@@ -279,9 +280,17 @@
#
else
@optimized = @optimized.gsub /id="#{id}"/, %Q{class="#{id}"}
end
end
+ end
+ end
+
+ # <defs> should be moved to the beginning of the SVG file for braod browser support. Ahem, Firefox ಠ_ಠ
+ def move_defs
+ if defs = @optimized.scan(/(\s*<defs>.+<\/defs>\s*)/m).flatten[0]
+ @optimized.sub!(defs, '')
+ @optimized.sub!(/(<svg.+?>)/, "\1#{defs}")
end
end
end
end