class CSSDeadClass
Public Class Methods
config()
click to toggle source
# File lib/css_dead_class.rb, line 11 def self.config @_config ||= Config.new end
new(opts={})
click to toggle source
# File lib/css_dead_class.rb, line 21 def initialize(opts={}) @options = self.class.config.dup opts.each do |k, v| @options[k] = v end end
option(key, default=nil, description=nil, options={})
click to toggle source
# File lib/css_dead_class.rb, line 14 def self.option(key, default=nil, description=nil, options={}) self.config[key] = Config.new(default: default, description: description, options: {}) end
Public Instance Methods
parse()
click to toggle source
# File lib/css_dead_class.rb, line 28 def parse cssSelectors = [] cssFiles = @options.css_files htmlFiles = @options.html_files classesToKeep = @options.classes_to_keep if cssFiles.length > 0 parser = CssParser::Parser.new cssFiles.each do |cssFile| parser.load_file!(cssFile) end parser.each_selector(:screen).each do |rule| rule = rule[:rules] rule.selectors.each do |segment| segment.split(/(?: |\+|>)/).each do |r| next if r.include? ":" if(r[0] == ".") cssSelectors.push(r) elsif(r.include? ".") s = r.split(".") s.shift s.each { |v| cssSelectors.push('.' + v)} end end end end cssSelectors.uniq! end if cssSelectors.length > 0 htmlFiles.each do |htmlFile| htmlDoc = Nokogiri::HTML(IO.read(htmlFile)) htmlDoc.css('*').each do |node| next if node.attributes.nil? or node.attributes['class'].nil? node['class'] = node.attributes['class'].value.split(/ /).select{ |cn| cssSelectors.include?('.' + cn) || classesToKeep.include?(cn) || classesToKeep.include?('.' + cn) }.join(" ") if(node.attributes['class'].value == "") node.attributes['class'].remove end end File.open(htmlFile, "w") do |fp| fp.puts htmlDoc.to_s end end end end