see-less-ess-ess 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +6 -0
- data/README.md +4 -1
- data/lib/see-less-ess-ess.rb +36 -19
- data/see-less-ess-ess.gemspec +3 -1
- data/spec/checker_spec.rb +12 -0
- data/spec/extractor_spec.rb +8 -2
- metadata +3 -2
data/.travis.yml
ADDED
data/README.md
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# See-less-ess-ess
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://travis-ci.org/glenjamin/see-less-ess-ess)
|
|
4
|
+
|
|
5
|
+
A compass extension that scans HTML files, makes a note of which tags and
|
|
6
|
+
classes are in use - and then removes anything else from the CSS file
|
|
4
7
|
|
|
5
8
|
## Installation
|
|
6
9
|
|
data/lib/see-less-ess-ess.rb
CHANGED
|
@@ -1,41 +1,53 @@
|
|
|
1
|
+
require 'set'
|
|
2
|
+
|
|
1
3
|
require 'sass'
|
|
2
4
|
require 'nokogiri'
|
|
3
5
|
|
|
4
6
|
module SeeLessEssEss
|
|
5
|
-
VERSION = '0.0.
|
|
7
|
+
VERSION = '0.0.2'
|
|
6
8
|
|
|
7
9
|
class Extractor
|
|
8
|
-
def initialize(
|
|
9
|
-
@
|
|
10
|
+
def initialize(glob)
|
|
11
|
+
@glob = glob
|
|
12
|
+
@extracted = false
|
|
10
13
|
end
|
|
11
14
|
|
|
12
15
|
def css_classes
|
|
13
|
-
|
|
16
|
+
extract_if_needed
|
|
17
|
+
@css_classes
|
|
18
|
+
end
|
|
19
|
+
def html_tags
|
|
20
|
+
extract_if_needed
|
|
21
|
+
@html_tags
|
|
14
22
|
end
|
|
15
23
|
|
|
16
24
|
protected
|
|
17
25
|
|
|
18
26
|
def files
|
|
19
|
-
Dir.glob(
|
|
27
|
+
Dir.glob(@glob)
|
|
20
28
|
end
|
|
21
|
-
def
|
|
22
|
-
|
|
23
|
-
|
|
29
|
+
def extract_if_needed
|
|
30
|
+
collector = Collector.new()
|
|
31
|
+
files.each do |file|
|
|
24
32
|
parser = Nokogiri::HTML::SAX::Parser.new(collector)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
parser.parse(open(file, 'rb').read)
|
|
34
|
+
end
|
|
35
|
+
@css_classes = collector.css_classes
|
|
36
|
+
@html_tags = collector.html_tags
|
|
29
37
|
end
|
|
30
38
|
|
|
31
39
|
class Collector < Nokogiri::XML::SAX::Document
|
|
32
40
|
def css_classes
|
|
33
|
-
@css_classes ||=
|
|
41
|
+
@css_classes ||= Set.new
|
|
34
42
|
end
|
|
35
|
-
def
|
|
43
|
+
def html_tags
|
|
44
|
+
@html_tags ||= Set.new
|
|
45
|
+
end
|
|
46
|
+
def start_element(tag, attrs = [])
|
|
47
|
+
html_tags << tag
|
|
36
48
|
attrs.each do |name, value|
|
|
37
49
|
if name == "class"
|
|
38
|
-
css_classes
|
|
50
|
+
css_classes.merge(value.split)
|
|
39
51
|
end
|
|
40
52
|
end
|
|
41
53
|
end
|
|
@@ -61,13 +73,18 @@ module SeeLessEssEss
|
|
|
61
73
|
def unused(simple)
|
|
62
74
|
if simple.is_a?(Sass::Selector::Class)
|
|
63
75
|
!css_classes_whitelist.include?(simple.name[0].to_s)
|
|
76
|
+
elsif simple.is_a?(Sass::Selector::Element)
|
|
77
|
+
!html_tags_whitelist.include?(simple.name[0].to_s)
|
|
64
78
|
else
|
|
65
79
|
false
|
|
66
80
|
end
|
|
67
81
|
end
|
|
68
82
|
|
|
69
83
|
def css_classes_whitelist
|
|
70
|
-
@
|
|
84
|
+
@class_whitelist ||= @extractor.css_classes + @used_classes
|
|
85
|
+
end
|
|
86
|
+
def html_tags_whitelist
|
|
87
|
+
@tag_whitelist ||= @extractor.html_tags
|
|
71
88
|
end
|
|
72
89
|
end
|
|
73
90
|
|
|
@@ -126,9 +143,9 @@ module SeeLessEssEss
|
|
|
126
143
|
@@initialised = true
|
|
127
144
|
|
|
128
145
|
Compass::Configuration.add_configuration_property(
|
|
129
|
-
:
|
|
146
|
+
:templates_glob, "Glob to scan for template files") do
|
|
130
147
|
|
|
131
|
-
project_path
|
|
148
|
+
"#{project_path}/**/*.html"
|
|
132
149
|
end
|
|
133
150
|
Compass::Configuration.add_configuration_property(
|
|
134
151
|
:used_css_classes, "CSS classes to explicity declare as 'used'") do
|
|
@@ -140,7 +157,7 @@ module SeeLessEssEss
|
|
|
140
157
|
alias_method :_slss_to_tree, :_to_tree
|
|
141
158
|
def _to_tree
|
|
142
159
|
conf = Compass.configuration
|
|
143
|
-
extractor = SeeLessEssEss::Extractor.new(conf.
|
|
160
|
+
extractor = SeeLessEssEss::Extractor.new(conf.templates_glob)
|
|
144
161
|
checker = SeeLessEssEss::Checker.new(extractor, conf.used_css_classes)
|
|
145
162
|
|
|
146
163
|
tree = _slss_to_tree
|
data/see-less-ess-ess.gemspec
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
|
|
3
|
+
require File.expand_path('../lib/see-less-ess-ess', __FILE__)
|
|
4
|
+
|
|
3
5
|
Gem::Specification.new do |gem|
|
|
4
6
|
gem.name = "see-less-ess-ess"
|
|
5
|
-
gem.version =
|
|
7
|
+
gem.version = SeeLessEssEss::VERSION
|
|
6
8
|
gem.authors = ["Glen Mailer"]
|
|
7
9
|
gem.email = ["glenjamin@gmail.com"]
|
|
8
10
|
gem.description = %q{Remove unused CSS rules from a compass project by scanning template files}
|
data/spec/checker_spec.rb
CHANGED
|
@@ -5,8 +5,10 @@ module SeeLessEssEss
|
|
|
5
5
|
let(:extractor) do
|
|
6
6
|
mock("Extractor").tap do |m|
|
|
7
7
|
m.stub!(:css_classes).and_return(parsed_css_classes)
|
|
8
|
+
m.stub!(:html_tags).and_return(parsed_html_tags)
|
|
8
9
|
end
|
|
9
10
|
end
|
|
11
|
+
let(:parsed_html_tags) { %w(html head title body h1 p td) }
|
|
10
12
|
let(:parsed_css_classes) { %w(row columns one two top-bar) }
|
|
11
13
|
let(:used_css_classes) { %w(zebra) }
|
|
12
14
|
|
|
@@ -48,6 +50,16 @@ module SeeLessEssEss
|
|
|
48
50
|
sequence(simple_sequence(className('class')))
|
|
49
51
|
).should be_true
|
|
50
52
|
end
|
|
53
|
+
it "should reject ul" do
|
|
54
|
+
subject.does_not_use(
|
|
55
|
+
sequence(simple_sequence(tag('ul')))
|
|
56
|
+
).should be_true
|
|
57
|
+
end
|
|
58
|
+
it "should reject ul.row" do
|
|
59
|
+
subject.does_not_use(
|
|
60
|
+
sequence(simple_sequence(tag('ul'),className('class')))
|
|
61
|
+
).should be_true
|
|
62
|
+
end
|
|
51
63
|
it "should reject .row .class" do
|
|
52
64
|
subject.does_not_use(
|
|
53
65
|
sequence(
|
data/spec/extractor_spec.rb
CHANGED
|
@@ -3,12 +3,18 @@ require File.expand_path('../../lib/see-less-ess-ess.rb', __FILE__)
|
|
|
3
3
|
module SeeLessEssEss
|
|
4
4
|
describe "Extractor" do
|
|
5
5
|
|
|
6
|
-
let(:subject) { Extractor.new(
|
|
7
|
-
let(:
|
|
6
|
+
let(:subject) { Extractor.new(glob) }
|
|
7
|
+
let(:glob) { "#{File.expand_path('../fixtures', __FILE__)}/**/*.html" }
|
|
8
8
|
|
|
9
9
|
it "should read all css classes from html files in location" do
|
|
10
|
+
subject.should have(6).css_classes
|
|
10
11
|
subject.css_classes.should include(*%w(body1 body2 title main left lead))
|
|
11
12
|
end
|
|
12
13
|
|
|
14
|
+
it "should read all tags from html files in location" do
|
|
15
|
+
subject.should have(6).html_tags
|
|
16
|
+
subject.html_tags.should include(*%w(html head title body h1 p))
|
|
17
|
+
end
|
|
18
|
+
|
|
13
19
|
end
|
|
14
20
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: see-less-ess-ess
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.2
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-12-
|
|
12
|
+
date: 2012-12-21 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: sass
|
|
@@ -68,6 +68,7 @@ extra_rdoc_files: []
|
|
|
68
68
|
files:
|
|
69
69
|
- .gitignore
|
|
70
70
|
- .rspec
|
|
71
|
+
- .travis.yml
|
|
71
72
|
- Gemfile
|
|
72
73
|
- LICENSE.txt
|
|
73
74
|
- README.md
|