Sha256: b3028e2ddac324c1a8b59f56dae55b092eb16e638bde6510e98daf4295323a0a

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

require 'rubygems'
require 'nokogiri'
require 'css_inliner/extractor'

module CSSInliner
  class Inliner
    def initialize(html, basedir)
      @document = Nokogiri.HTML html
      @basedir = basedir
      @extractor = Extractor.new @document, @basedir
    end

    def inline
      original_style = {}
      @document.css('*[style]').each do |elem|
        original_style[elem] = elem['style']
      end

      styles = {}
      @extractor.extract.each_pair do |sel, rs|
        next if sel =~ /@|:/
        body = @document.css('body')
        body.css(sel).each_with_index do |elem, i|
          styles[elem] = CssParser::RuleSet.new(nil, nil) unless styles[elem]
          styles[elem] = CssParser.merge styles[elem], rs
        end
      end

      original_style.each_pair do |elem, style|
        styles[elem] = CssParser::RuleSet.new(nil, nil) unless styles[elem]
        rs = CssParser::RuleSet.new(nil, style)
        styles[elem] = CssParser.merge styles[elem], rs
      end

      styles.each_pair do |elem, rule_set|
        elem['style'] = rule_set.declarations_to_s
      end

      @document
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
css_inliner-0.1.0 lib/css_inliner/inliner.rb