middleman-autoprefixer 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c9e4222dfeb14498a0d05024934954b82c85495c
4
- data.tar.gz: 60754eeb1ff19d79724340153f9cb041ab7b62ce
3
+ metadata.gz: c8e0dbefd3dbf52be4931785c1fbaae0d7581bdf
4
+ data.tar.gz: d0f3812a1266d1f4f0e2699e329234d49df519e2
5
5
  SHA512:
6
- metadata.gz: aa7e0e853bd427743ac7ad346542b94362daf224c2f3d0e2900f42893b307f1594ec70a0b8b011ba6d8cc7ed772cad611c4ce446c6752e10181263477722259f
7
- data.tar.gz: a994f9afc1f39ca70b892ba8aad3425d2ca421589a09d2dead26ca8d2aaddf33d9a99b43b1e9d6b91c20317cb00adcb69911f4b8c1d2f0e6f4a2d2ecc4358db9
6
+ metadata.gz: b5a31ff16e80e345d3a58c8b6f08d16fe02f6221a4c632353d2a8fa1a407a4121dc86e4aa519090ef13f8e410313db01b8bb87555d4bd22d181630db2cb89af5
7
+ data.tar.gz: a3c9daaefdfc70169fb95b00bf25ca7116025e4c16b9f43f1242d065e3a364120dc486602c4be6f161fb674e131fc33f8dcd996705c4767f4da34bbb5d977bea
data/README.md CHANGED
@@ -1,5 +1,4 @@
1
- [![Gem version](http://img.shields.io/gem/v/middleman-autoprefixer.svg)](http://badge.fury.io/rb/middleman-autoprefixer) [![Build status](http://img.shields.io/travis/porada/middleman-autoprefixer.svg)](https://travis-ci.org/porada/middleman-autoprefixer) [![Dependency status](http://img.shields.io/gemnasium/porada/middleman-autoprefixer.svg)](https://gemnasium.com/porada/middleman-autoprefixer) [![Code Climate](http://img.shields.io/codeclimate/github/porada/middleman-autoprefixer.svg
2
- )](https://codeclimate.com/github/porada/middleman-autoprefixer)
1
+ [![Gem version](http://img.shields.io/gem/v/middleman-autoprefixer.svg?style=flat)](http://badge.fury.io/rb/middleman-autoprefixer) [![Build status](http://img.shields.io/travis/porada/middleman-autoprefixer.svg?style=flat)](https://travis-ci.org/porada/middleman-autoprefixer) [![Dependency status](http://img.shields.io/gemnasium/porada/middleman-autoprefixer.svg?style=flat)](https://gemnasium.com/porada/middleman-autoprefixer) [![Code Climate](http://img.shields.io/codeclimate/github/porada/middleman-autoprefixer.svg?style=flat)](https://codeclimate.com/github/porada/middleman-autoprefixer)
3
2
 
4
3
  # Middleman::Autoprefixer
5
4
 
@@ -21,16 +20,32 @@ activate :autoprefixer
21
20
 
22
21
  ## Configuration
23
22
 
24
- The extension has 2 optionally configurable fields:
23
+ The extension has 4 optionally configurable fields:
25
24
 
26
25
  ```ruby
27
26
  activate :autoprefixer do |config|
28
27
  config.browsers = ['last 2 versions', 'Explorer >= 9']
29
28
  config.cascade = false
29
+ config.inline = true
30
+ config.ignore = ['hacks.css']
30
31
  end
31
32
  ```
32
33
 
33
- Both fields take values (and use defaults) accordingly to [Autoprefixer’s](https://github.com/ai/autoprefixer#browsers) [documentation](https://github.com/ai/autoprefixer#visual-cascade).
34
+ ### browsers
35
+
36
+ The list of targeted browsers. Takes values and uses defaults accordingly to [Autoprefixer’s documentation](https://github.com/ai/autoprefixer#browsers).
37
+
38
+ ### cascade
39
+
40
+ The visual cascade of prefixed properties: `true` or `false`. Uses the default value accordingly to [Autoprefixer’s documentation](https://github.com/ai/autoprefixer#visual-cascade).
41
+
42
+ ### inline
43
+
44
+ Whether to prefix inline styles within HTML files: `true` or `false`. Disabled by default.
45
+
46
+ ### ignore
47
+
48
+ The array of patterns or paths to exclude from prefixing. Empty by default.
34
49
 
35
50
  ## License
36
51
 
@@ -5,6 +5,8 @@ Feature: Postprocessing stylesheets with Autoprefixer in different configuration
5
5
  When I go to "/stylesheets/page.css"
6
6
  Then I should not see "-ms-border-radius"
7
7
  And I should see "border-radius"
8
+ When I go to "/index.html"
9
+ Then I should see "-ms-border-radius"
8
10
 
9
11
  Scenario: Passing options in a block
10
12
  Given the Server is running at "block-app"
@@ -39,3 +41,17 @@ Feature: Postprocessing stylesheets with Autoprefixer in different configuration
39
41
  -moz-box-sizing: border-box;
40
42
  box-sizing: border-box;
41
43
  """
44
+
45
+ Scenario: Inline HTML
46
+ Given the Server is running at "inline-app"
47
+ When I go to "/index.html"
48
+ Then I should not see "-ms-border-radius"
49
+ And I should see "border-radius"
50
+
51
+ Scenario: Ignoring paths
52
+ Given the Server is running at "ignore-app"
53
+ When I go to "/stylesheets/yep.css"
54
+ Then I should see "-ms-border-radius"
55
+ When I go to "/stylesheets/nope.css"
56
+ Then I should not see "-ms-border-radius"
57
+ And I should see "border-radius"
@@ -0,0 +1,12 @@
1
+ <html>
2
+ <head>
3
+ </head>
4
+ <body>
5
+ <style>
6
+ input {
7
+ -ms-border-radius: 5px;
8
+ border-radius: 5px;
9
+ }
10
+ </style>
11
+ </body>
12
+ </html>
@@ -0,0 +1 @@
1
+ activate :autoprefixer, ignore: ['yep.css']
File without changes
@@ -0,0 +1,4 @@
1
+ input {
2
+ -ms-border-radius: 5px;
3
+ border-radius: 5px;
4
+ }
@@ -0,0 +1,4 @@
1
+ input {
2
+ -ms-border-radius: 5px;
3
+ border-radius: 5px;
4
+ }
@@ -0,0 +1 @@
1
+ activate :autoprefixer, inline: true
@@ -0,0 +1,12 @@
1
+ <html>
2
+ <head>
3
+ </head>
4
+ <body>
5
+ <style>
6
+ input {
7
+ -ms-border-radius: 5px;
8
+ border-radius: 5px;
9
+ }
10
+ </style>
11
+ </body>
12
+ </html>
@@ -1,8 +1,8 @@
1
1
  require 'middleman-core'
2
2
 
3
3
  require_relative 'middleman-autoprefixer/version'
4
- require_relative 'middleman-autoprefixer/extension'
5
4
 
6
5
  ::Middleman::Extensions.register(:autoprefixer) do
6
+ require_relative 'middleman-autoprefixer/extension'
7
7
  ::Middleman::Autoprefixer::Extension
8
8
  end
@@ -1,17 +1,83 @@
1
- require_relative 'processor'
2
-
3
1
  module Middleman
4
2
  module Autoprefixer
5
3
  class Extension < ::Middleman::Extension
6
- option :browsers
7
- option :cascade
4
+ option :browsers, nil, 'Supported browsers'
5
+ option :cascade, nil, 'Should it cascade'
6
+ option :inline, false, 'Whether to prefix CSS inline within HTML files'
7
+ option :ignore, [], 'Patterns to avoid prefixing'
8
8
 
9
- def initialize(app, options_hash = {}, &block)
9
+ def initialize(app, options={}, &block)
10
10
  super
11
+
12
+ require 'middleman-core/util'
13
+ require 'autoprefixer-rails'
11
14
  end
12
15
 
13
16
  def after_configuration
14
- Processor.new(options).configure(app.sprockets)
17
+ # Setup Rack middleware to apply prefixes
18
+ app.use Rack, browsers: options[:browsers],
19
+ cascade: options[:cascade],
20
+ inline: options[:inline],
21
+ ignore: options[:ignore]
22
+ end
23
+
24
+ # Rack middleware to look for CSS and apply prefixes.
25
+ class Rack
26
+ INLINE_CSS_REGEX = /(<style[^>]*>\s*(?:\/\*<!\[CDATA\[\*\/\n)?)(.*?)((?:(?:\n\s*)?\/\*\]\]>\*\/)?\s*<\/style>)/m
27
+
28
+ # Init
29
+ # @param [Class] app
30
+ # @param [Hash] options
31
+ def initialize(app, options={})
32
+ @app = app
33
+ @browsers = options[:browsers]
34
+ @cascade = options[:cascade]
35
+ @inline = options[:inline]
36
+ @ignore = options[:ignore]
37
+ end
38
+
39
+ # Rack interface
40
+ # @param [Rack::Environmemt] env
41
+ # @return [Array]
42
+ def call(env)
43
+ status, headers, response = @app.call(env)
44
+
45
+ if inline_html_content?(env['PATH_INFO'])
46
+ prefixed = ::Middleman::Util.extract_response_text(response)
47
+
48
+ prefixed.gsub!(INLINE_CSS_REGEX) do
49
+ $1 << process($2) << $3
50
+ end
51
+
52
+ headers['Content-Length'] = ::Rack::Utils.bytesize(prefixed).to_s
53
+ response = [prefixed]
54
+ elsif standalone_css_content?(env['PATH_INFO'])
55
+ prefixed_css = process(::Middleman::Util.extract_response_text(response))
56
+
57
+ headers['Content-Length'] = ::Rack::Utils.bytesize(prefixed_css).to_s
58
+ response = [prefixed_css]
59
+ end
60
+
61
+ [status, headers, response]
62
+ end
63
+
64
+ private
65
+
66
+ def process(css)
67
+ config = {}
68
+ config[:browsers] = Array(@browsers)
69
+ config[:cascade] = @cascade unless @cascade.nil?
70
+
71
+ ::AutoprefixerRails.process(css, config).css
72
+ end
73
+
74
+ def inline_html_content?(path)
75
+ (path.end_with?('.html') || path.end_with?('.php')) && @inline
76
+ end
77
+
78
+ def standalone_css_content?(path)
79
+ path.end_with?('.css') && @ignore.none? { |ignore| ::Middleman::Util.path_match(ignore, path) }
80
+ end
15
81
  end
16
82
  end
17
83
  end
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module Autoprefixer
3
- VERSION = '2.0.1'.freeze
3
+ VERSION = '2.1.0'.freeze
4
4
  end
5
5
  end
@@ -6,8 +6,8 @@ require 'middleman-autoprefixer/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'middleman-autoprefixer'
8
8
  spec.version = Middleman::Autoprefixer::VERSION
9
- spec.authors = ['Dominik Porada']
10
- spec.email = ['dominik@porada.co']
9
+ spec.authors = ['Dominik Porada', 'Thomas Reynolds']
10
+ spec.email = ['dominik@porada.co', 'me@tdreyno.com']
11
11
  spec.summary = 'Autoprefixer integration with Middleman'
12
12
  spec.homepage = 'https://github.com/porada/middleman-autoprefixer'
13
13
  spec.license = 'MIT'
@@ -17,12 +17,11 @@ Gem::Specification.new do |spec|
17
17
  spec.require_paths = ['lib']
18
18
 
19
19
  spec.add_dependency 'middleman-core', '>= 3.3.3'
20
- spec.add_dependency 'middleman-sprockets', '>= 3.3.3'
21
- spec.add_dependency 'autoprefixer-rails', '~> 2.1.0'
20
+ spec.add_dependency 'autoprefixer-rails', '~> 2.1.1'
22
21
 
23
22
  spec.add_development_dependency 'middleman', '>= 3.3.3'
24
- spec.add_development_dependency 'cucumber', '~> 1.3.14'
25
- spec.add_development_dependency 'aruba', '~> 0.5.4'
23
+ spec.add_development_dependency 'cucumber', '~> 1.3'
24
+ spec.add_development_dependency 'aruba', '~> 0.6'
26
25
 
27
26
  spec.add_development_dependency 'bundler', '>= 1.6'
28
27
  spec.add_development_dependency 'rake', '>= 10.3'
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-autoprefixer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Porada
8
+ - Thomas Reynolds
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-06-30 00:00:00.000000000 Z
12
+ date: 2014-07-25 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: middleman-core
@@ -24,34 +25,20 @@ dependencies:
24
25
  - - ">="
25
26
  - !ruby/object:Gem::Version
26
27
  version: 3.3.3
27
- - !ruby/object:Gem::Dependency
28
- name: middleman-sprockets
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 3.3.3
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 3.3.3
41
28
  - !ruby/object:Gem::Dependency
42
29
  name: autoprefixer-rails
43
30
  requirement: !ruby/object:Gem::Requirement
44
31
  requirements:
45
32
  - - "~>"
46
33
  - !ruby/object:Gem::Version
47
- version: 2.1.0
34
+ version: 2.1.1
48
35
  type: :runtime
49
36
  prerelease: false
50
37
  version_requirements: !ruby/object:Gem::Requirement
51
38
  requirements:
52
39
  - - "~>"
53
40
  - !ruby/object:Gem::Version
54
- version: 2.1.0
41
+ version: 2.1.1
55
42
  - !ruby/object:Gem::Dependency
56
43
  name: middleman
57
44
  requirement: !ruby/object:Gem::Requirement
@@ -72,28 +59,28 @@ dependencies:
72
59
  requirements:
73
60
  - - "~>"
74
61
  - !ruby/object:Gem::Version
75
- version: 1.3.14
62
+ version: '1.3'
76
63
  type: :development
77
64
  prerelease: false
78
65
  version_requirements: !ruby/object:Gem::Requirement
79
66
  requirements:
80
67
  - - "~>"
81
68
  - !ruby/object:Gem::Version
82
- version: 1.3.14
69
+ version: '1.3'
83
70
  - !ruby/object:Gem::Dependency
84
71
  name: aruba
85
72
  requirement: !ruby/object:Gem::Requirement
86
73
  requirements:
87
74
  - - "~>"
88
75
  - !ruby/object:Gem::Version
89
- version: 0.5.4
76
+ version: '0.6'
90
77
  type: :development
91
78
  prerelease: false
92
79
  version_requirements: !ruby/object:Gem::Requirement
93
80
  requirements:
94
81
  - - "~>"
95
82
  - !ruby/object:Gem::Version
96
- version: 0.5.4
83
+ version: '0.6'
97
84
  - !ruby/object:Gem::Dependency
98
85
  name: bundler
99
86
  requirement: !ruby/object:Gem::Requirement
@@ -125,6 +112,7 @@ dependencies:
125
112
  description:
126
113
  email:
127
114
  - dominik@porada.co
115
+ - me@tdreyno.com
128
116
  executables: []
129
117
  extensions: []
130
118
  extra_rdoc_files: []
@@ -152,11 +140,15 @@ files:
152
140
  - fixtures/hash-app/source/index.html
153
141
  - fixtures/hash-app/source/stylesheets/_link.sass
154
142
  - fixtures/hash-app/source/stylesheets/page.scss
143
+ - fixtures/ignore-app/config.rb
144
+ - fixtures/ignore-app/source/index.html
145
+ - fixtures/ignore-app/source/stylesheets/nope.scss
146
+ - fixtures/ignore-app/source/stylesheets/yep.scss
147
+ - fixtures/inline-app/config.rb
148
+ - fixtures/inline-app/source/index.html
155
149
  - lib/middleman-autoprefixer.rb
156
150
  - lib/middleman-autoprefixer/extension.rb
157
- - lib/middleman-autoprefixer/processor.rb
158
151
  - lib/middleman-autoprefixer/version.rb
159
- - lib/middleman_extension.rb
160
152
  - middleman-autoprefixer.gemspec
161
153
  homepage: https://github.com/porada/middleman-autoprefixer
162
154
  licenses:
@@ -201,3 +193,9 @@ test_files:
201
193
  - fixtures/hash-app/source/index.html
202
194
  - fixtures/hash-app/source/stylesheets/_link.sass
203
195
  - fixtures/hash-app/source/stylesheets/page.scss
196
+ - fixtures/ignore-app/config.rb
197
+ - fixtures/ignore-app/source/index.html
198
+ - fixtures/ignore-app/source/stylesheets/nope.scss
199
+ - fixtures/ignore-app/source/stylesheets/yep.scss
200
+ - fixtures/inline-app/config.rb
201
+ - fixtures/inline-app/source/index.html
@@ -1,36 +0,0 @@
1
- require 'autoprefixer-rails'
2
-
3
- module Middleman
4
- module Autoprefixer
5
- class Processor < AutoprefixerRails::Processor
6
- def initialize(options)
7
- super *to_processor_arguments(options)
8
- end
9
-
10
- def postprocess(context, content)
11
- begin
12
- process(content).css
13
- rescue ExecJS::ProgramError => error
14
- if error.message =~ /Can't parse CSS/
15
- content
16
- else
17
- raise error
18
- end
19
- end
20
- end
21
-
22
- def configure(sprockets_env)
23
- sprockets_env.register_postprocessor 'text/css', :autoprefixer, &method(:postprocess)
24
- end
25
-
26
- private
27
-
28
- def to_processor_arguments(options)
29
- [
30
- Array(options.browsers),
31
- options.to_h.except(:browsers).reject { |_, value| value.nil? }
32
- ]
33
- end
34
- end
35
- end
36
- end
@@ -1 +0,0 @@
1
- require_relative 'middleman-autoprefixer'