Class: Slippery::Processors::SelfContained
- Inherits:
-
Object
- Object
- Slippery::Processors::SelfContained
- Defined in:
- lib/slippery/processors/self_contained.rb
Class Method Summary collapse
Instance Method Summary collapse
- #call(doc) ⇒ Object
- #convert_image_to_data_uri ⇒ Object
- #convert_script_to_inline ⇒ Object
- #convert_stylesheet_to_inline ⇒ Object
- #data_uri(uri) ⇒ Object
-
#read_uri(uri) ⇒ Object
def convert_style_uri_to_data_uri ->(style) { H[:style, style.attributes, style.children.first.gsub(/url(?[^‘“)]+[’”]?)/) {|url| “url(‘#{data_uri url[/url(?([^’”)]+)/,1] }‘)“} ] } end.
Class Method Details
.call(doc) ⇒ Object
7 8 9 |
# File 'lib/slippery/processors/self_contained.rb', line 7 def self.call(doc) self.new.call(doc) end |
Instance Method Details
#call(doc) ⇒ Object
11 12 13 14 15 16 17 |
# File 'lib/slippery/processors/self_contained.rb', line 11 def call(doc) doc .rewrite('link[rel=stylesheet]', &convert_stylesheet_to_inline) .rewrite('script[src]', &convert_script_to_inline) .rewrite('img', &convert_image_to_data_uri) #.rewrite('style', &convert_style_uri_to_data_uri) end |
#convert_image_to_data_uri ⇒ Object
30 31 32 |
# File 'lib/slippery/processors/self_contained.rb', line 30 def convert_image_to_data_uri ->(img) { H[:img, img.attributes.merge(src: data_uri(img[:src]))] } end |
#convert_script_to_inline ⇒ Object
23 24 25 26 27 28 |
# File 'lib/slippery/processors/self_contained.rb', line 23 def convert_script_to_inline ->(script) do attrs = script.attributes.reject { |k,v| k=='src' } H[:script, attrs, read_uri(script[:src])] end end |
#convert_stylesheet_to_inline ⇒ Object
19 20 21 |
# File 'lib/slippery/processors/self_contained.rb', line 19 def convert_stylesheet_to_inline ->(link) { H[:style, { type: 'text/css' }, read_uri(link[:href])] } end |
#data_uri(uri) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/slippery/processors/self_contained.rb', line 48 def data_uri(uri) base64 = Base64.encode64(read_uri uri) ext = File.extname(uri) type = { '.jpg' => 'image/jpeg', '.jpeg' => 'image/jpeg', '.png' => 'image/png', '.gif' => 'image/gif', }[ext.downcase] "data:#{type};base64,#{base64}" end |
#read_uri(uri) ⇒ Object
def convert_style_uri_to_data_uri
->(style) {
H[:style, style.attributes, style.children.first.gsub(/url\(['"]?[^'"\)]+['"]?\)/) {|url| "url('#{data_uri url[/url\(['"]?([^'"\)]+)/,1] }')"} ] }
end
39 40 41 42 43 44 45 46 |
# File 'lib/slippery/processors/self_contained.rb', line 39 def read_uri(uri) @@download_cache ||= {} if uri =~ /http/ @@download_cache[uri] ||= open(uri.sub('file://', '')).read else open(uri.sub('file://', '')).read end end |