module CSSPlop
Constants
- VERSION
Public Class Methods
apply(stylesheet, document)
click to toggle source
# File lib/cssplop.rb, line 21 def self.apply stylesheet, document css_doc = if stylesheet.is_a? CSSPool::CSS::Document stylesheet else CSSPool.CSS stylesheet end html_doc = if document.is_a? Nokogiri::XML::Node document.dup # no sideeffects else Nokogiri::HTML.fragment document end self.apply! css_doc, html_doc if document.is_a? Nokogiri::XML::Node return html_doc else return html_doc.to_html end end
apply!(stylesheet, document)
click to toggle source
# File lib/cssplop.rb, line 43 def self.apply! stylesheet, document elements_declarations_map = {} stylesheet.rule_sets.each do |rule_set| selectors = rule_set.selectors.map &:to_css elements = document.css *selectors elements.each do |element| elements_declarations_map[element] ||= [] elements_declarations_map[element].concat rule_set.declarations end end elements_declarations_map.each do |element, declarations| element_style_doc = CSSPool.CSS "* {#{element[:style]}}" element_declarations = element_style_doc.rule_sets.first.declarations element_declarations.concat declarations.flatten element[:style] = element_declarations.map(&:to_css).join.strip end return document end
inline_styles(document)
click to toggle source
# File lib/cssplop.rb, line 5 def self.inline_styles document html_doc = Nokogiri::HTML.fragment document # All styles that don't have sources. styles = html_doc.xpath 'descendant-or-self::style[not(@src)]' styles.each do |style| begin stylesheet = CSSPool::CSS style.text self.apply! stylesheet, html_doc style.remove end end return html_doc.to_html end