sprockets-media_query_combiner 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
@@ -4,7 +4,8 @@ if defined?(Rails)
|
|
4
4
|
module Sprockets
|
5
5
|
module MediaQueryCombiner
|
6
6
|
class Engine < Rails::Engine
|
7
|
-
initializer :setup_media_query_combiner, after: 'sprockets.environment', group: :
|
7
|
+
initializer :setup_media_query_combiner, after: 'sprockets.environment', group: :all do |app|
|
8
|
+
app.assets.register_postprocessor 'text/css', Sprockets::MediaQueryCombiner::Processor
|
8
9
|
app.assets.register_bundle_processor 'text/css', Sprockets::MediaQueryCombiner::Processor
|
9
10
|
end
|
10
11
|
end
|
@@ -8,11 +8,17 @@ module Sprockets
|
|
8
8
|
|
9
9
|
def evaluate(context, locals, &block)
|
10
10
|
queries = Hash.new { |hash, key| hash[key] = '' }
|
11
|
-
|
12
|
-
|
11
|
+
pretty = true
|
12
|
+
|
13
|
+
filtered_data = data.gsub(/(?<query>\n?@media[^{]+){(?<body>(?<braces>(?:[^{}]+)|({\g<braces>}))*)}\n?/m) do |match|
|
14
|
+
queries[$1] << $2
|
15
|
+
pretty &&= /\n$/m === match
|
16
|
+
''
|
13
17
|
end
|
14
18
|
|
15
|
-
|
19
|
+
combined = queries.map { |query, body| "#{query}{#{body}}" }.
|
20
|
+
join(("\n" if pretty))
|
21
|
+
"#{filtered_data}#{combined}\n"
|
16
22
|
end
|
17
23
|
end
|
18
24
|
end
|
@@ -3,42 +3,69 @@ require 'sprockets/media_query_combiner/processor'
|
|
3
3
|
|
4
4
|
module Sprockets::MediaQueryCombiner
|
5
5
|
describe Processor do
|
6
|
-
it "should
|
6
|
+
it "should with pretty css" do
|
7
7
|
combiner = Processor.new do
|
8
8
|
<<CSS
|
9
9
|
h3 {
|
10
10
|
color: orange
|
11
11
|
}
|
12
|
+
|
12
13
|
@media (max-width: 480px) {
|
13
14
|
h1 {
|
14
15
|
color: red
|
15
16
|
}
|
16
17
|
}
|
18
|
+
|
17
19
|
@media (max-width: 980px) {
|
18
20
|
h4 {
|
19
21
|
color: black
|
20
22
|
}
|
21
23
|
}
|
24
|
+
|
22
25
|
@media (max-width: 480px) {
|
23
26
|
h2 {
|
24
27
|
color: blue
|
25
28
|
}
|
26
29
|
}
|
30
|
+
|
31
|
+
b {
|
32
|
+
color: yellow
|
33
|
+
}
|
27
34
|
CSS
|
28
35
|
end
|
29
36
|
combiner.evaluate(nil, nil).should == <<CSS
|
30
37
|
h3 {
|
31
38
|
color: orange
|
32
39
|
}
|
33
|
-
|
40
|
+
|
41
|
+
b {
|
42
|
+
color: yellow
|
43
|
+
}
|
44
|
+
|
45
|
+
@media (max-width: 480px) {
|
46
|
+
h1 {
|
34
47
|
color: red
|
35
|
-
}
|
48
|
+
}
|
49
|
+
|
50
|
+
h2 {
|
36
51
|
color: blue
|
37
|
-
}
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
@media (max-width: 980px) {
|
56
|
+
h4 {
|
38
57
|
color: black
|
39
|
-
}
|
58
|
+
}
|
59
|
+
}
|
40
60
|
CSS
|
41
61
|
end
|
42
62
|
|
63
|
+
it "should work with ugly css" do
|
64
|
+
combiner = Processor.new do
|
65
|
+
"h3{color:orange}@media (max-width:480px){h1{color:red}}@media (max-width:980px){h4{color:black}}@media (max-width:480px){h2{color:blue}}\n"
|
66
|
+
end
|
67
|
+
combiner.evaluate(nil, nil).should ==
|
68
|
+
"h3{color:orange}@media (max-width:480px){h1{color:red}h2{color:blue}}@media (max-width:980px){h4{color:black}}\n"
|
69
|
+
end
|
43
70
|
end
|
44
71
|
end
|