csscss 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0813cfe3a3c5ea373702b3e9a666ab1f7c89a99d
4
+ data.tar.gz: e0c6d6a8927eaf0486c3345cea4829fb0845d85f
5
+ SHA512:
6
+ metadata.gz: 232d3550de49a5f655cab3f68981f3d8b58bfd4c7465a8aee565d0f3e27b7a282c611a5434ce4283d6daa34c1f4e5ef62c143e676a2b2f041b0bed2da3cce8fa
7
+ data.tar.gz: 8e1ea90d3ef93a39dc721ac4e19463dc9fd248f4dc888602a05f4a370a5d4da1ac742e33031d08c32fdf3d532f53d6fe7443493cb7ec7f90d1cfbe784797402b
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.0.0-p195
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 1.3.2 - 6/22/2013 ##
2
+
3
+ * Fixes attribute parsing bug that includes comments with braces
4
+ * Fixes parsing bug with empty media selectors #67
5
+ * Fixes parsing bug with quoted brackets #72
6
+ * Fixes parsing bug with nested media queries #73
7
+ * Removes --compass-with-config deprecation
8
+ * Adds a CONTRIBUTING.md file with instructions
9
+
1
10
  ## 1.3.1 - 4/20/2013 ##
2
11
 
3
12
  * Fixes --ignore-sass-mixins bug with @importing
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,53 @@
1
+ # Contributing to csscss
2
+
3
+ First of all: Thanks!
4
+
5
+ ## Bugs & Feature Requests
6
+
7
+ You can file bugs on the [issues
8
+ tracker](https://github.com/zmoazeni/csscss/issues), and tag them with
9
+ 'bug'. Feel free to discuss features there, too.
10
+
11
+ ## Good report structure
12
+
13
+ Please include the following four things in your report:
14
+
15
+ 1. The smallest CSS snippet to explain the problem.
16
+ 2. What you did.
17
+ 3. What you expected to happen.
18
+ 4. What happened instead.
19
+
20
+ The more information the better.
21
+
22
+ ## Contributing Code
23
+
24
+ It's easy to contribute code to csscss:
25
+
26
+ 1. Fork csscss.
27
+ 2. Create a topic branch - `git checkout -b my_branch`
28
+ 3. Push to your branch - `git push origin my_branch`
29
+ 4. Make sure the code follows the contributing guidelines below.
30
+ 5. Create a [Pull Request](http://help.github.com/pull-requests/) from your
31
+ branch.
32
+ 6. That's it!
33
+
34
+ ## First Time OSS Contributors
35
+
36
+ Submitting your first pull request can be a little daunting. If this is
37
+ your first Open Source contribution, please mention it in your pull
38
+ request and I'll help guide you through the process.
39
+
40
+ ## Contributing Guidelines
41
+
42
+ * Make sure your code follows typical [ruby
43
+ conventions](https://github.com/bbatsov/ruby-style-guide).
44
+ * Make sure the test suite is green. A simple `bundle exec rake test`
45
+ will run all the tests.
46
+ * Include a CHANGELOG entry with your change. Add an `(Unreleased)`
47
+ section at the top if one doesn't exist.
48
+ * Try to keep the git commits squashed and concise. Keep tests and code
49
+ changes together in the same commit. Keep only logical changes together
50
+ in a single commit.
51
+ * I strongly encourage [well written git commit
52
+ messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
53
+ * Make sure all whitespace is trimmed from the end of lines.
data/CONTRIBUTORS.md CHANGED
@@ -4,3 +4,5 @@
4
4
  * Ivan Lazarevic @kopipejst
5
5
  * Matt DuVall @mduvall twitter:@mduvall_
6
6
  * Mekka Okereke @mekka @mekkaokereke
7
+ * JoseLuis Torres @joseluistorres twitter:@joseluis_torres
8
+ * Paul Simpson @prsimp
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- csscss (1.3.1)
4
+ csscss (1.3.2)
5
5
  colorize
6
6
  parslet (~> 1.5)
7
7
 
@@ -17,12 +17,12 @@ GEM
17
17
  chunky_png (~> 1.2)
18
18
  fssm (>= 0.2.7)
19
19
  sass (~> 3.1)
20
- debugger (1.5.0)
20
+ debugger (1.6.0)
21
21
  columnize (>= 0.3.1)
22
22
  debugger-linecache (~> 1.2.0)
23
- debugger-ruby_core_source (~> 1.2.0)
23
+ debugger-ruby_core_source (~> 1.2.1)
24
24
  debugger-linecache (1.2.0)
25
- debugger-ruby_core_source (1.2.0)
25
+ debugger-ruby_core_source (1.2.2)
26
26
  fssm (0.2.10)
27
27
  less (2.3.1)
28
28
  commonjs (~> 0.2.6)
data/README.md CHANGED
@@ -63,6 +63,13 @@ LESS requires an additional javascript runtime.
63
63
  rubies, and [therubyrhino](https://rubygems.org/gems/therubyrhino) on
64
64
  jruby.
65
65
 
66
+ ## Why doesn't csscss automatically remove duplications for me? ##
67
+
68
+ I have been asked this a lot, but csscss is intentionally designed this
69
+ way. Check out [this
70
+ post](http://connectionrequired.com/blog/2013/04/why-csscss-doesnt-remove-duplication-for-you/)
71
+ for my reasoning.
72
+
66
73
  ## I found bugs ##
67
74
 
68
75
  This is still a new and evolving project. I heartily welcome feedback.
data/lib/csscss/cli.rb CHANGED
@@ -98,10 +98,7 @@ module Csscss
98
98
  enable_compass if @compass = compass
99
99
  end
100
100
 
101
- opts.on("--compass-with-config config", "Enable compass extensions when parsing sass/scss and pass config file",
102
- "DEPRECATED: use --compass --require path/to/config.rb instead."
103
- ) do |config|
104
- deprecate("Use --compass --require #{config} instead of --compass-with-config #{config}")
101
+ opts.on("--compass-with-config config", "Enable compass extensions when parsing sass/scss and pass config file") do |config|
105
102
  @compass = true
106
103
  enable_compass(config)
107
104
  end
@@ -12,26 +12,22 @@ module Csscss
12
12
  class Parser < Parslet::Parser
13
13
  include Common
14
14
 
15
- rule(:comment) {
16
- (space? >> str('/*') >> (str('*/').absent? >> any).repeat >> str('*/') >> space?).as(:comment)
17
- }
18
-
19
- rule(:css_space?) {
20
- comment.repeat(1) | space?
15
+ rule(:raw_comment) {
16
+ space? >> str('/*') >> (str('*/').absent? >> any).repeat >> str('*/') >> space?
21
17
  }
18
+ rule(:comment) { raw_comment.as(:comment) }
22
19
 
23
20
  rule(:blank_attribute) { str(";") >> space? }
24
21
 
22
+ rule(:attribute_value) { any_quoted { any } | (str('/*').absent? >> match["^;}"]) | raw_comment }
23
+
25
24
  rule(:attribute) {
26
25
  match["^:{}"].repeat(1).as(:property) >>
27
26
  str(":") >>
28
- (match["^;}"].repeat(1).capture(:stuff) >> dynamic {|source, context|
29
- if context.captures[:stuff].to_s =~ /data:/
30
- str(";") >> match["^;}"].repeat(1)
31
- else
32
- any.present?
33
- end
34
- }).as(:value) >>
27
+ (
28
+ (stri("data:").absent? >> attribute_value) |
29
+ (stri("data:").present? >> attribute_value.repeat(1) >> str(";") >> attribute_value.repeat(1))
30
+ ).repeat(1).as(:value) >>
35
31
  str(";").maybe >>
36
32
  space?
37
33
  }
@@ -70,7 +66,8 @@ module Csscss
70
66
  str("@") >>
71
67
  match["^{}"].repeat(1) >>
72
68
  str("{") >>
73
- (comment | ruleset).repeat(0) >>
69
+ space? >>
70
+ (comment | ruleset | nested_ruleset).repeat(1) >>
74
71
  str("}") >>
75
72
  space?
76
73
  ).as(:nested_ruleset)
@@ -98,8 +95,8 @@ module Csscss
98
95
  end
99
96
 
100
97
  class Transformer < Parslet::Transform
101
- rule(nested_ruleset: sequence(:rulesets)) {
102
- rulesets
98
+ rule(nested_ruleset: subtree(:rulesets)) { |context|
99
+ context[:rulesets].flatten
103
100
  }
104
101
 
105
102
  rule(import: simple(:import)) { [] }
@@ -1,3 +1,3 @@
1
1
  module Csscss
2
- VERSION = "1.3.1"
2
+ VERSION = "1.3.2"
3
3
  end
@@ -139,6 +139,14 @@ module Csscss::Parser
139
139
  @parser.url.must_parse "url(data:image/svg+xml;base64,IMGDATAGOESHERE4/5/h/1+==)"
140
140
  @parser.url.must_parse "url('data:image/svg+xml;base64,IMGDATAGOESHERE4/5/h/1+==')"
141
141
  end
142
+
143
+ it "parses specials characters" do
144
+ @parser.between('"', '"') { @parser.symbol("{") }.must_parse '"{"'
145
+ @parser.between('"', '"') { @parser.symbol("}") }.must_parse '"}"'
146
+ @parser.between('"', '"') { @parser.symbol("%") }.must_parse '"%"'
147
+ @parser.double_quoted { @parser.symbol("{") }.must_parse %("{")
148
+ @parser.single_quoted { @parser.symbol('{') }.must_parse %('{')
149
+ end
142
150
  end
143
151
  end
144
152
  end
@@ -23,14 +23,14 @@ module Csscss::Parser
23
23
  end
24
24
 
25
25
  it "parses comments" do
26
- @parser.css_space?.must_parse "/* foo */"
27
- @parser.css_space?.must_parse %$
26
+ @parser.comment.must_parse "/* foo */"
27
+ @parser.comment.must_parse %$
28
28
  /* foo
29
29
  * bar
30
30
  */
31
31
  $
32
32
 
33
- @parser.css_space?.must_parse %$
33
+ @parser.comment.repeat(1).must_parse %$
34
34
  /* foo */
35
35
  /* bar */
36
36
  $
@@ -63,11 +63,13 @@ module Csscss::Parser
63
63
  */
64
64
  .bar { border: 1px solid black /* sdflk */ }
65
65
  .baz { background: white /* sdflk */ }
66
+ .baz2 { background: white /* {sdflk} */ }
66
67
  $
67
68
 
68
69
  trans(css).must_equal([
69
70
  rs(sel(".bar"), [dec("border", "1px solid black /* sdflk */")]),
70
- rs(sel(".baz"), [dec("background", "white /* sdflk */")])
71
+ rs(sel(".baz"), [dec("background", "white /* sdflk */")]),
72
+ rs(sel(".baz2"), [dec("background", "white /* {sdflk} */")])
71
73
  ])
72
74
  end
73
75
 
@@ -117,6 +119,15 @@ module Csscss::Parser
117
119
  }
118
120
  }
119
121
 
122
+ @media only screen {
123
+ @-webkit-keyframes webkitSiblingBugfix {
124
+ from { position: relative; }
125
+ to { position: relative; }
126
+ }
127
+
128
+ a { position: relative }
129
+ }
130
+
120
131
  h1 {
121
132
  outline: 1px;
122
133
  }
@@ -125,10 +136,34 @@ module Csscss::Parser
125
136
  trans(css).must_equal([
126
137
  rs(sel("#foo"), [dec("background-color", "black")]),
127
138
  rs(sel("#bar"), [dec("display", "none")]),
139
+ rs(sel("from"), [dec("position", "relative")]),
140
+ rs(sel("to"), [dec("position", "relative")]),
141
+ rs(sel("a"), [dec("position", "relative")]),
128
142
  rs(sel("h1"), [dec("outline", "1px")])
129
143
  ])
130
144
  end
131
145
 
146
+ it "recognizes empty @media queries with no spaces" do
147
+ css = %$
148
+ @media (min-width: 768px) and (max-width: 979px) {}
149
+ $
150
+
151
+ trans(css).must_equal([
152
+ rs(sel("@media (min-width: 768px) and (max-width: 979px)"), []),
153
+ ])
154
+ end
155
+
156
+ it "recognizes empty @media queries with spaces" do
157
+ css = %$
158
+ @media (min-width: 768px) and (max-width: 979px) {
159
+ }
160
+ $
161
+
162
+ trans(css).must_equal([
163
+ rs(sel("@media (min-width: 768px) and (max-width: 979px)"), []),
164
+ ])
165
+ end
166
+
132
167
  it "ignores @import statements" do
133
168
  css = %$
134
169
  @import "foo.css";
@@ -210,6 +245,47 @@ module Csscss::Parser
210
245
  dec("display", "block")])
211
246
  ])
212
247
  end
248
+
249
+ it "parses attributes with special characters" do
250
+ css = %$
251
+
252
+ #menu a::before {
253
+ content: "{";
254
+ left: -6px;
255
+ }
256
+
257
+ #menu a::after {
258
+ content: "}";
259
+ right: -6px;
260
+ }
261
+
262
+ #menu a::weird {
263
+ content: "@";
264
+ up: -2px;
265
+ }
266
+
267
+ #menu a::after_all {
268
+ content: '{';
269
+ right: -6px;
270
+ }
271
+
272
+ $
273
+
274
+ trans(css).must_equal([
275
+ rs(sel("#menu a::before"), [dec("content", '"{"'),
276
+ dec("left", "-6px")
277
+ ]),
278
+ rs(sel("#menu a::after"), [dec("content", '"}"'),
279
+ dec("right", "-6px")
280
+ ]),
281
+ rs(sel("#menu a::weird"), [dec("content", '"@"'),
282
+ dec("up", "-2px")
283
+ ]),
284
+ rs(sel("#menu a::after_all"), [dec("content", "'{'"),
285
+ dec("right", "-6px")
286
+ ])
287
+ ])
288
+ end
213
289
  end
214
290
  end
215
291
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csscss
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
5
- prerelease:
4
+ version: 1.3.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Zach Moazeni
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-04-21 00:00:00.000000000 Z
11
+ date: 2013-06-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: parslet
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,17 +27,15 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: colorize
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  description: csscss will parse any CSS files you give it and let you know which rulesets
@@ -53,8 +48,10 @@ extensions: []
53
48
  extra_rdoc_files: []
54
49
  files:
55
50
  - .gitignore
51
+ - .ruby-version
56
52
  - .travis.yml
57
53
  - CHANGELOG.md
54
+ - CONTRIBUTING.md
58
55
  - CONTRIBUTORS.md
59
56
  - Gemfile
60
57
  - Gemfile.lock
@@ -111,30 +108,26 @@ files:
111
108
  - test/test_helper.rb
112
109
  homepage: http://zmoazeni.github.io/csscss/
113
110
  licenses: []
111
+ metadata: {}
114
112
  post_install_message:
115
113
  rdoc_options: []
116
114
  require_paths:
117
115
  - lib
118
116
  required_ruby_version: !ruby/object:Gem::Requirement
119
- none: false
120
117
  requirements:
121
- - - ! '>='
118
+ - - '>='
122
119
  - !ruby/object:Gem::Version
123
120
  version: '1.9'
124
121
  required_rubygems_version: !ruby/object:Gem::Requirement
125
- none: false
126
122
  requirements:
127
- - - ! '>='
123
+ - - '>='
128
124
  - !ruby/object:Gem::Version
129
125
  version: '0'
130
- segments:
131
- - 0
132
- hash: -4485977171346278397
133
126
  requirements: []
134
127
  rubyforge_project:
135
- rubygems_version: 1.8.25
128
+ rubygems_version: 2.0.3
136
129
  signing_key:
137
- specification_version: 3
130
+ specification_version: 4
138
131
  summary: A CSS redundancy analyzer that analyzes redundancy.
139
132
  test_files:
140
133
  - test/csscss/json_reporter_test.rb