stylesheet 0.1.3 → 0.1.4
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/lib/stylesheet/css_rule_list.rb +1 -1
- data/lib/stylesheet/css_style_declaration.rb +2 -0
- data/lib/stylesheet/css_style_sheet.rb +8 -0
- data/lib/stylesheet/version.rb +1 -1
- data/spec/css_rule_list_spec.rb +18 -0
- data/spec/css_style_declaration_spec.rb +14 -0
- data/spec/css_style_sheet_spec.rb +22 -0
- metadata +1 -1
@@ -16,7 +16,7 @@ module Stylesheet
|
|
16
16
|
|
17
17
|
def parse(rules, parent)
|
18
18
|
# clean out comments
|
19
|
-
rules = rules.gsub(/\/\*[\s\S]*?\*\//, '')
|
19
|
+
rules = rules.gsub(/\/\*[\s\S]*?\*\//, '').gsub("/*", "").gsub("*/", "")
|
20
20
|
|
21
21
|
# clean extraneous whitespace
|
22
22
|
rules = rules.to_s.gsub(/\s+/m, " ").gsub(/([\};])\s/, '\1')
|
@@ -17,6 +17,8 @@ module Stylesheet
|
|
17
17
|
|
18
18
|
re = /((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^\)]*?\)|[^};])+)\s*/
|
19
19
|
css_text.to_s.strip.chomp(";").scan(re).flatten.each do |declaration|
|
20
|
+
next unless declaration.include?(":")
|
21
|
+
|
20
22
|
property, value = declaration.split(":", 2)
|
21
23
|
@declarations_list << declaration.strip
|
22
24
|
@declarations[property.strip] = parse_value(value.strip)
|
@@ -62,6 +62,14 @@ module Stylesheet
|
|
62
62
|
|
63
63
|
alias_method :rules, :css_rules
|
64
64
|
|
65
|
+
def import_rules
|
66
|
+
css_rules.select {|r| r.type == CssRule::IMPORT_RULE }
|
67
|
+
end
|
68
|
+
|
69
|
+
def style_rules
|
70
|
+
css_rules.select {|r| r.type == CssRule::STYLE_RULE }
|
71
|
+
end
|
72
|
+
|
65
73
|
def parent_style_sheet
|
66
74
|
@parent if @owner_rule
|
67
75
|
end
|
data/lib/stylesheet/version.rb
CHANGED
data/spec/css_rule_list_spec.rb
CHANGED
@@ -36,6 +36,17 @@ describe CssRuleList do
|
|
36
36
|
}"
|
37
37
|
end
|
38
38
|
|
39
|
+
let(:style_w_mismatched_comments) do
|
40
|
+
"body {
|
41
|
+
color: #444;
|
42
|
+
background-color: #535353;
|
43
|
+
}
|
44
|
+
|
45
|
+
*/
|
46
|
+
p {
|
47
|
+
font-size: 90%;
|
48
|
+
}" end
|
49
|
+
|
39
50
|
let(:style_w_empty_rules) do
|
40
51
|
"#cboxOverlay{color:#ccc}#colorbox{}#cboxTopLeft{width:21px;}"
|
41
52
|
end
|
@@ -73,6 +84,13 @@ describe CssRuleList do
|
|
73
84
|
expect(rules[1].css_text).to eq "p { font-size: 90%;}"
|
74
85
|
end
|
75
86
|
|
87
|
+
it "removes mismatched comments" do
|
88
|
+
rules = CssRuleList.new(style_w_mismatched_comments)
|
89
|
+
expect(rules.length).to eq 2
|
90
|
+
expect(rules[0].css_text).to eq "body { color: #444;background-color: #535353;}"
|
91
|
+
expect(rules[1].css_text).to eq "p { font-size: 90%;}"
|
92
|
+
end
|
93
|
+
|
76
94
|
it "parses empty rules" do
|
77
95
|
rules = CssRuleList.new(style_w_empty_rules)
|
78
96
|
expect(rules.length).to eq 3
|
@@ -94,4 +94,18 @@ describe CssStyleDeclaration do
|
|
94
94
|
expect(decl.declarations).to eq expected
|
95
95
|
end
|
96
96
|
end
|
97
|
+
|
98
|
+
describe "a declaration with an invalid rule" do
|
99
|
+
let(:css_text) do
|
100
|
+
"padding0;color:#1d6299;"
|
101
|
+
end
|
102
|
+
|
103
|
+
it "skips the invalid rule" do
|
104
|
+
rule = CssStyleRule.new(:css_text => "div.section { #{css_text} }")
|
105
|
+
decl = CssStyleDeclaration.new(:css_text => css_text, :parent_rule => rule)
|
106
|
+
|
107
|
+
expected = {"color" => "#1d6299"}
|
108
|
+
expect(decl.declarations).to eq expected
|
109
|
+
end
|
110
|
+
end
|
97
111
|
end
|
@@ -142,6 +142,28 @@ describe CssStyleSheet do
|
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
145
|
+
describe "#import_rules" do
|
146
|
+
it "returns all import rules from style sheet" do
|
147
|
+
sheet = CssStyleSheet.new("http://example.com/css_import/stylesheets/screen.css")
|
148
|
+
expect(sheet.import_rules.length).to eq 9
|
149
|
+
|
150
|
+
sheet.import_rules.each do |rule|
|
151
|
+
expect(rule.type).to eq CssRule::IMPORT_RULE
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "#style_rules" do
|
157
|
+
it "returns all style rules from style sheet" do
|
158
|
+
sheet = CssStyleSheet.new("http://example.com/css_import/stylesheets/screen.css")
|
159
|
+
expect(sheet.style_rules.length).to eq 1
|
160
|
+
|
161
|
+
sheet.style_rules.each do |rule|
|
162
|
+
expect(rule.type).to eq CssRule::STYLE_RULE
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
145
167
|
describe "#owner_rule" do
|
146
168
|
let(:parent) do
|
147
169
|
CssStyleSheet.new("http://example.com/css_import/stylesheets/screen.css")
|