Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Find unused CSS selectors by scraping your HTML
Ruby
tag: v0.1.0

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bin
lib
test
.document
.gitignore
LICENSE
README.rdoc
Rakefile
VERSION
deadweight.gemspec

README.rdoc

deadweight

Deadweight is RCov for CSS, kind of. Given a set of stylesheets and a set of URLs, it determines which selectors are actually used and reports which can be “safely” deleted.

Screencast!

Ryan Bates has worked his magic once again. Head over here for an excellent introduction to deadweight: railscasts.com/episodes/180-finding-unused-css

A Simple Example

# lib/tasks/deadweight.rake

require 'deadweight'

desc "run Deadweight (script/server needs to be running)"
task :deadweight do
  dw = Deadweight.new
  dw.stylesheets = %w( /stylesheets/style.css )
  dw.pages = %w( / /page/1 /about )
  puts dw.run
end

This will output all unused rules, one per line.

Alternately, you can run it from the command-line:

$ deadweight -s styles.css -s ie.css index.html about.html

You can pipe in CSS rules from STDIN:

$ cat styles.css | deadweight index.html

And you can use it as an HTTP proxy:

$ deadweight -l deadweight.log -s styles.css -w http://github.com/ -P

How You Install It

gem sources -a http://gems.github.com
sudo gem install aanand-deadweight

Things to Note

  • By default, it looks at localhost:3000.

  • It's completely dumb about any classes, IDs or tags that are only added by your Javascript layer, but you can filter them out by setting ignore_selectors.

  • You can optionally tell it to use Mechanize, and set up more complicated targets for scraping by specifying them as Procs.

  • There is experimental support for Lyndon (github.com/defunkt/lyndon) with -L

A More Complex Example, In Light of All That

# lib/tasks/deadweight.rake

require 'deadweight'

desc "run Deadweight on staging server"
task :deadweight do
  dw = Deadweight.new

  dw.mechanize = true

  dw.root = 'http://staging.example.com'

  dw.stylesheets = %w( /stylesheets/style.css )

  dw.pages = %w( / /page/1 /about )

  dw.pages << proc {
    fetch('/login')
    form = agent.page.forms.first
    form.username = 'username'
    form.password = 'password'
    agent.submit(form)
    fetch('/secret-page')
  }

  dw.ignore_selectors = /hover|lightbox|superimposed_kittens/

  puts dw.run
end

Copyright

Copyright © 2009 Aanand Prasad. See LICENSE for details.

Something went wrong with that request. Please try again.