compass 0.13.alpha.4 → 0.13.alpha.5
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.
- checksums.yaml +7 -0
- data/README.markdown +2 -3
- data/Rakefile +91 -5
- data/VERSION.yml +1 -1
- data/examples/compass/images/emblem-a043c4f148.png +0 -0
- data/examples/compass/images/flag-03c3b29b35.png +0 -0
- data/examples/compass/images/flag-21cfbfbfc8.png +0 -0
- data/examples/css3/extensions/fancy-fonts/templates/project/Prociono.otf +0 -0
- data/features/command_line.feature +2 -6
- data/features/step_definitions/command_line_steps.rb +1 -0
- data/frameworks/compass/stylesheets/compass/_css3.scss +0 -1
- data/frameworks/compass/stylesheets/compass/_support.scss +353 -35
- data/frameworks/compass/stylesheets/compass/css3/_animation.scss +49 -48
- data/frameworks/compass/stylesheets/compass/css3/_appearance.scss +4 -8
- data/frameworks/compass/stylesheets/compass/css3/_background-clip.scss +15 -19
- data/frameworks/compass/stylesheets/compass/css3/_background-origin.scss +17 -19
- data/frameworks/compass/stylesheets/compass/css3/_background-size.scss +4 -8
- data/frameworks/compass/stylesheets/compass/css3/_border-radius.scss +37 -39
- data/frameworks/compass/stylesheets/compass/css3/_box-shadow.scss +45 -20
- data/frameworks/compass/stylesheets/compass/css3/_box-sizing.scss +6 -8
- data/frameworks/compass/stylesheets/compass/css3/_box.scss +12 -13
- data/frameworks/compass/stylesheets/compass/css3/_columns.scss +46 -26
- data/frameworks/compass/stylesheets/compass/css3/_deprecated-support.scss +272 -0
- data/frameworks/compass/stylesheets/compass/css3/_filter.scss +17 -10
- data/frameworks/compass/stylesheets/compass/css3/_flexbox.scss +134 -281
- data/frameworks/compass/stylesheets/compass/css3/_font-face.scss +5 -5
- data/frameworks/compass/stylesheets/compass/css3/_hyphenation.scss +14 -11
- data/frameworks/compass/stylesheets/compass/css3/_images.scss +77 -67
- data/frameworks/compass/stylesheets/compass/css3/_inline-block.scss +15 -6
- data/frameworks/compass/stylesheets/compass/css3/_opacity.scss +6 -2
- data/frameworks/compass/stylesheets/compass/css3/_pie.scss +1 -73
- data/frameworks/compass/stylesheets/compass/css3/_regions.scss +7 -6
- data/frameworks/compass/stylesheets/compass/css3/_selection.scss +45 -17
- data/frameworks/compass/stylesheets/compass/css3/_shared.scss +4 -261
- data/frameworks/compass/stylesheets/compass/css3/_text-shadow.scss +1 -1
- data/frameworks/compass/stylesheets/compass/css3/_transform.scss +24 -32
- data/frameworks/compass/stylesheets/compass/css3/_transition.scss +102 -152
- data/frameworks/compass/stylesheets/compass/css3/_user-interface.scss +42 -27
- data/frameworks/compass/stylesheets/compass/typography/_vertical_rhythm.scss +2 -1
- data/frameworks/compass/stylesheets/compass/typography/links/_hover-link.scss +1 -1
- data/frameworks/compass/stylesheets/compass/typography/lists/_horizontal-list.scss +2 -2
- data/frameworks/compass/stylesheets/compass/typography/lists/_inline-list.scss +1 -1
- data/frameworks/compass/stylesheets/compass/typography/text/_ellipsis.scss +1 -1
- data/frameworks/compass/stylesheets/compass/utilities/_sass.scss +2 -0
- data/frameworks/compass/stylesheets/compass/utilities/color/_brightness.scss +12 -0
- data/frameworks/compass/stylesheets/compass/utilities/color/_contrast.scss +36 -12
- data/frameworks/compass/stylesheets/compass/utilities/general/_float.scss +6 -2
- data/frameworks/compass/stylesheets/compass/utilities/general/_hacks.scss +23 -4
- data/frameworks/compass/stylesheets/compass/utilities/general/_min.scss +1 -1
- data/frameworks/compass/stylesheets/compass/utilities/sass/_lists.scss +16 -0
- data/frameworks/compass/stylesheets/compass/utilities/sass/_maps.scss +19 -0
- data/frameworks/compass/stylesheets/compass/utilities/sprites/_base.scss +25 -18
- data/frameworks/compass/stylesheets/compass/utilities/sprites/_sprite-img.scss +3 -1
- data/frameworks/compass/stylesheets/compass/utilities/tables/_borders.scss +3 -3
- data/lib/compass.rb +1 -1
- data/lib/compass/browser_support.rb +1 -1
- data/lib/compass/caniuse.rb +247 -0
- data/lib/compass/configuration/adapters.rb +7 -1
- data/lib/compass/sass_extensions/functions.rb +5 -0
- data/lib/compass/sass_extensions/functions/constants.rb +2 -2
- data/lib/compass/sass_extensions/functions/cross_browser_support.rb +176 -1
- data/lib/compass/sass_extensions/functions/display.rb +24 -19
- data/lib/compass/sass_extensions/functions/env.rb +37 -8
- data/lib/compass/sass_extensions/functions/gradient_support.rb +10 -13
- data/lib/compass/sass_extensions/functions/math.rb +31 -13
- data/lib/compass/sass_extensions/functions/sprites.rb +48 -25
- data/lib/compass/sass_extensions/monkey_patches/browser_support.rb +42 -13
- data/lib/compass/sass_extensions/sprites/image.rb +14 -4
- data/lib/compass/sass_extensions/sprites/image_methods.rb +19 -3
- data/lib/compass/sprite_importer/content.erb +8 -7
- data/lib/compass/watcher/project_watcher.rb +75 -42
- data/lib/compass/watcher/watch.rb +35 -17
- data/test/fixtures/sprites/public/images/focus/ten-by-ten.png +0 -0
- data/test/fixtures/sprites/public/images/focus/ten-by-ten_active.png +0 -0
- data/test/fixtures/sprites/public/images/focus/ten-by-ten_focus.png +0 -0
- data/test/fixtures/sprites/public/images/focus/ten-by-ten_hover.png +0 -0
- data/test/fixtures/sprites/public/images/focus/ten-by-ten_target.png +0 -0
- data/test/fixtures/stylesheets/compass/config.rb +1 -0
- data/test/fixtures/stylesheets/compass/css/animation-with-legacy-ie.css +1 -9
- data/test/fixtures/stylesheets/compass/css/animation.css +1 -9
- data/test/fixtures/stylesheets/compass/css/appearance.css +3 -0
- data/test/fixtures/stylesheets/compass/css/background-clip.css +4 -8
- data/test/fixtures/stylesheets/compass/css/background-origin.css +4 -8
- data/test/fixtures/stylesheets/compass/css/background-size.css +3 -10
- data/test/fixtures/stylesheets/compass/css/border_radius.css +3 -3
- data/test/fixtures/stylesheets/compass/css/{box-sizeing.css → box-sizing.css} +2 -2
- data/test/fixtures/stylesheets/compass/css/box_shadow.css +15 -5
- data/test/fixtures/stylesheets/compass/css/brightness.css +14 -0
- data/test/fixtures/stylesheets/compass/css/browser-support.css +306 -0
- data/test/fixtures/stylesheets/compass/css/color.css +18 -0
- data/test/fixtures/stylesheets/compass/css/columns.css +27 -18
- data/test/fixtures/stylesheets/compass/css/filters.css +6 -6
- data/test/fixtures/stylesheets/compass/css/flexbox.css +84 -111
- data/test/fixtures/stylesheets/compass/css/fonts.css +1 -1
- data/test/fixtures/stylesheets/compass/css/gradients.css +53 -53
- data/test/fixtures/stylesheets/compass/css/grid_background.css +11 -11
- data/test/fixtures/stylesheets/compass/css/hyphenation.css +2 -4
- data/test/fixtures/stylesheets/compass/css/lists.css +6 -12
- data/test/fixtures/stylesheets/compass/css/regions.css +2 -2
- data/test/fixtures/stylesheets/compass/css/selection.css +41 -4
- data/test/fixtures/stylesheets/compass/css/sprites_with_explicit_separator.css +16 -0
- data/test/fixtures/stylesheets/compass/css/support.css +62 -0
- data/test/fixtures/stylesheets/compass/css/transform.css +64 -136
- data/test/fixtures/stylesheets/compass/css/transition.css +27 -45
- data/test/fixtures/stylesheets/compass/css/typography/links/hover-link.css +4 -0
- data/test/fixtures/stylesheets/compass/css/user-interface.css +34 -7
- data/test/fixtures/stylesheets/compass/css/utilities.css +7 -7
- data/test/fixtures/stylesheets/compass/css/vertical_rhythm.css +6 -9
- data/test/fixtures/stylesheets/compass/images/flag_states-sc42d7bf926.png +0 -0
- data/test/fixtures/stylesheets/compass/images/flag_states/foo.png +0 -0
- data/test/fixtures/stylesheets/compass/images/flag_states/foo_active.png +0 -0
- data/test/fixtures/stylesheets/compass/images/flag_states/foo_focus.png +0 -0
- data/test/fixtures/stylesheets/compass/images/flag_states/foo_hover.png +0 -0
- data/test/fixtures/stylesheets/compass/images/flag_states/foo_target.png +0 -0
- data/test/fixtures/stylesheets/compass/sass/animation-with-legacy-ie.scss +1 -3
- data/test/fixtures/stylesheets/compass/sass/appearance.scss +5 -0
- data/test/fixtures/stylesheets/compass/sass/background-clip.scss +0 -5
- data/test/fixtures/stylesheets/compass/sass/background-origin.scss +0 -5
- data/test/fixtures/stylesheets/compass/sass/background-size.scss +0 -5
- data/test/fixtures/stylesheets/compass/sass/{box-sizeing.scss → box-sizing.scss} +1 -1
- data/test/fixtures/stylesheets/compass/sass/box_shadow.scss +2 -0
- data/test/fixtures/stylesheets/compass/sass/brightness.scss +12 -0
- data/test/fixtures/stylesheets/compass/sass/browser-support.scss +30 -0
- data/test/fixtures/stylesheets/compass/sass/color.scss +22 -0
- data/test/fixtures/stylesheets/compass/sass/filters.scss +1 -0
- data/test/fixtures/stylesheets/compass/sass/flexbox.scss +84 -40
- data/test/fixtures/stylesheets/compass/sass/gradients.sass +3 -2
- data/test/fixtures/stylesheets/compass/sass/selection.scss +29 -4
- data/test/fixtures/stylesheets/compass/sass/sprites_with_explicit_separator.scss +7 -0
- data/test/fixtures/stylesheets/compass/sass/support.scss +137 -0
- data/test/fixtures/stylesheets/compass/sass/transition.scss +0 -3
- data/test/fixtures/stylesheets/compass/sass/typography/links/hover-link.scss +3 -0
- data/test/fixtures/stylesheets/compass/sass/user-interface.scss +16 -5
- data/test/fixtures/stylesheets/compass/sass/utilities.scss +4 -4
- data/test/fixtures/stylesheets/envtest/css/env.css +4 -4
- data/test/fixtures/stylesheets/envtest/tmp/env.css +4 -4
- data/test/integrations/sprites_test.rb +30 -1
- data/test/test_helper.rb +2 -2
- data/test/units/caniuse_test.rb +115 -0
- data/test/units/command_line_test.rb +1 -0
- data/test/units/sass_extensions_test.rb +5 -0
- data/test/units/sprites/image_test.rb +12 -0
- data/test/units/sprites/sprite_map_test.rb +11 -0
- data/test/units/watcher/project_watcher_test.rb +26 -18
- metadata +96 -42
- data/examples/compass/src/pie.scss +0 -110
- data/frameworks/compass/stylesheets/compass/css3/_transform-legacy.scss +0 -87
- data/frameworks/compass/templates/pie/LICENSE +0 -12
- data/frameworks/compass/templates/pie/LICENSE-APACHE2.txt +0 -13
- data/frameworks/compass/templates/pie/LICENSE-GPL2.txt +0 -278
- data/frameworks/compass/templates/pie/PIE.htc +0 -96
- data/frameworks/compass/templates/pie/manifest.rb +0 -39
- data/frameworks/compass/templates/pie/pie.scss +0 -74
- data/lib/compass/sass_extensions/functions/utility.rb +0 -10
- data/test/fixtures/stylesheets/compass/css/pie.css +0 -23
- data/test/fixtures/stylesheets/compass/sass/pie.scss +0 -47
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: ee5da32e1abc5dbc8067fddb8a30e67e7df94666
|
|
4
|
+
data.tar.gz: d0cf1dd621e9e80ba6457560d23267f33a7669f5
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 691fc67fa9830a372bcb3f43b9b7aa5f21cb99d63b0d61d547a99fe9057830032d22965016c2465285bb44e4700725ef1c00d8da773fb1e82322f962bd006c07
|
|
7
|
+
data.tar.gz: ce6fd2a32e34cd4f0d7282c8a2c504541b2d095047a08c3413346d6f0202e29465aff72d4377122eb37ae67328d86e9d7e39a50448e73857b670f9a7dd731e92
|
data/README.markdown
CHANGED
|
@@ -11,15 +11,14 @@ Code Quality: [
|
|
12
12
|
|
|
13
13
|
## Author
|
|
14
|
-
Compass is written by [Chris Eppstein](http://chriseppstein.github.
|
|
15
|
-
Chris is
|
|
14
|
+
Compass is written by [Chris Eppstein](http://chriseppstein.github.io/).<br>
|
|
15
|
+
Chris is a software engineer at [LinkedIn](http://www.linkedin.com/) and a member of the [Sass](https://github.com/nex3/sass) core team.
|
|
16
16
|
|
|
17
17
|
## Core Team Members
|
|
18
18
|
|
|
19
19
|
* [Scott Davis](https://github.com/scottdavis)
|
|
20
20
|
* [Eric Meyer](https://github.com/ericam)
|
|
21
21
|
* [Brandon Mathis](https://github.com/imathis)
|
|
22
|
-
* [Anthony Short](https://github.com/anthonyshort/)
|
|
23
22
|
|
|
24
23
|
## Major Contributors
|
|
25
24
|
|
data/Rakefile
CHANGED
|
@@ -3,7 +3,12 @@ if ENV["PKG"]
|
|
|
3
3
|
$: << File.expand_path(File.dirname(__FILE__))+"/lib"
|
|
4
4
|
else
|
|
5
5
|
require 'bundler'
|
|
6
|
-
Bundler.setup
|
|
6
|
+
Bundler.setup
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
unless ENV['CI']
|
|
10
|
+
require 'colorize'
|
|
11
|
+
require 'fileutils'
|
|
7
12
|
end
|
|
8
13
|
|
|
9
14
|
begin
|
|
@@ -58,6 +63,22 @@ Rake::TestTask.new :integrations do |t|
|
|
|
58
63
|
t.verbose = true
|
|
59
64
|
end
|
|
60
65
|
|
|
66
|
+
desc "Download the latest browser stats data."
|
|
67
|
+
task :caniuse do
|
|
68
|
+
require 'uri'
|
|
69
|
+
require 'net/http'
|
|
70
|
+
require 'net/https'
|
|
71
|
+
uri = URI.parse("https://raw.github.com/Fyrd/caniuse/master/data.json")
|
|
72
|
+
https = Net::HTTP.new(uri.host,uri.port)
|
|
73
|
+
https.use_ssl = true
|
|
74
|
+
req = Net::HTTP::Get.new(uri.path)
|
|
75
|
+
res = https.request(req)
|
|
76
|
+
filename = File.join(File.dirname(__FILE__), "data", "caniuse.json")
|
|
77
|
+
open(filename, "wb") do |file|
|
|
78
|
+
file.write(res.body)
|
|
79
|
+
end
|
|
80
|
+
puts "#{filename} (#{res.body.size} bytes)"
|
|
81
|
+
end
|
|
61
82
|
|
|
62
83
|
desc "Compile Examples into HTML and CSS"
|
|
63
84
|
task :examples do
|
|
@@ -114,12 +135,12 @@ begin
|
|
|
114
135
|
require 'cucumber/rake/task'
|
|
115
136
|
require 'rcov/rcovtask'
|
|
116
137
|
namespace :rcov do
|
|
117
|
-
Cucumber::Rake::Task.new(:cucumber) do |t|
|
|
138
|
+
Cucumber::Rake::Task.new(:cucumber) do |t|
|
|
118
139
|
t.rcov = true
|
|
119
140
|
t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/,features\/ --aggregate coverage.data}
|
|
120
141
|
t.rcov_opts << %[-o "coverage"]
|
|
121
142
|
end
|
|
122
|
-
|
|
143
|
+
|
|
123
144
|
Rcov::RcovTask.new(:units) do |rcov|
|
|
124
145
|
rcov.libs << 'lib'
|
|
125
146
|
test_files = FileList['test/**/*_test.rb']
|
|
@@ -130,8 +151,8 @@ begin
|
|
|
130
151
|
rcov.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/,features\/ --aggregate coverage.data}
|
|
131
152
|
rcov.rcov_opts << %[-o "coverage" --sort coverage]
|
|
132
153
|
end
|
|
133
|
-
|
|
134
|
-
|
|
154
|
+
|
|
155
|
+
|
|
135
156
|
desc "Run both specs and features to generate aggregated coverage"
|
|
136
157
|
task :all do |t|
|
|
137
158
|
rm "coverage.data" if File.exist?("coverage.data")
|
|
@@ -160,3 +181,68 @@ begin
|
|
|
160
181
|
rescue LoadError => e
|
|
161
182
|
puts "WARNING: #{e}"
|
|
162
183
|
end
|
|
184
|
+
|
|
185
|
+
namespace :test do
|
|
186
|
+
debug = false
|
|
187
|
+
desc "update test expectations if needed"
|
|
188
|
+
task :update do
|
|
189
|
+
Rake::Task['test:update:fixtures'].invoke
|
|
190
|
+
end
|
|
191
|
+
task :debug do
|
|
192
|
+
debug = true
|
|
193
|
+
Rake::Task['test:update:fixtures'].invoke
|
|
194
|
+
end
|
|
195
|
+
namespace :update do
|
|
196
|
+
EXPECTED = 'css'
|
|
197
|
+
TMP = 'tmp'
|
|
198
|
+
#desc "update fixture expectations for test cases if needed"
|
|
199
|
+
task :fixtures do
|
|
200
|
+
fixtures = File.join('test/fixtures/stylesheets/compass'.split('/'))
|
|
201
|
+
# remove any existing temporary files
|
|
202
|
+
FileUtils.rm_rf(File.join(File.dirname(__FILE__), fixtures, TMP, '.'))
|
|
203
|
+
# compile the fixtures
|
|
204
|
+
puts "checking test cases..."
|
|
205
|
+
CHECKMARK = "\u2713 "
|
|
206
|
+
filter = debug ? '--trace' : "| grep 'error.*#{fixtures}'"
|
|
207
|
+
errors = %x[compass compile #{fixtures} #{filter}]
|
|
208
|
+
# check for compilation errors
|
|
209
|
+
if not errors.empty?
|
|
210
|
+
puts "Please fix the following errors before proceeding:".colorize(:red) if not debug
|
|
211
|
+
puts errors
|
|
212
|
+
else
|
|
213
|
+
# check to see what's changed
|
|
214
|
+
diff = %x[diff -r #{File.join(fixtures, EXPECTED, '')} #{File.join(fixtures, TMP, '')}]
|
|
215
|
+
# ignore non-CSS files in css/
|
|
216
|
+
diff = diff.gsub(/^Only in .*\/css\/(.*)\:.*[^.css]/, '')
|
|
217
|
+
if diff.empty?
|
|
218
|
+
puts "#{CHECKMARK}Cool! Looks like all the tests are up to date".colorize(:green)
|
|
219
|
+
else
|
|
220
|
+
puts "The following changes were found:"
|
|
221
|
+
puts "===================================="
|
|
222
|
+
# check for new or removed expectations
|
|
223
|
+
diff.scan(/^Only in .*\/(#{EXPECTED}|#{TMP})\/(.*)\: (.*).css/).each do |match|
|
|
224
|
+
config = (match[0] == TMP) ? [:green, '>', 'NEW TEST'] : [:red, '<', 'DELETED']
|
|
225
|
+
puts "[#{File.join(match[1], match[2])}] #{config[2].colorize(config[0])}".colorize(:cyan)
|
|
226
|
+
new_file = File.join(File.dirname(__FILE__), fixtures, match[0], match[1], match[2]) + '.css'
|
|
227
|
+
puts File.read(new_file).gsub(/^(.*)/, config[1] + ' \1').colorize(config[0])
|
|
228
|
+
end
|
|
229
|
+
diff = diff.gsub(/^diff\s\-r\s.*\/tmp\/(.*).css/, '[\1]'.colorize(:cyan))
|
|
230
|
+
diff = diff.gsub(/^Only in .*\n?/, '')
|
|
231
|
+
diff = diff.gsub(/^(\<.*)/, '\1'.colorize(:red))
|
|
232
|
+
diff = diff.gsub(/^(\>.*)/, '\1'.colorize(:green))
|
|
233
|
+
diff = diff.gsub(/^(\d+.*)/, '\1'.colorize(:cyan))
|
|
234
|
+
puts diff
|
|
235
|
+
puts "===================================="
|
|
236
|
+
puts "Are all of these changes expected? [y/n]".colorize(:yellow)
|
|
237
|
+
if (($stdin.gets.chomp)[0] == 'y')
|
|
238
|
+
FileUtils.rm_rf(File.join(File.dirname(__FILE__), fixtures, EXPECTED, '.'))
|
|
239
|
+
FileUtils.cp_r(File.join(File.dirname(__FILE__), fixtures, TMP, '.'), File.join(File.dirname(__FILE__), fixtures, EXPECTED))
|
|
240
|
+
puts "#{CHECKMARK}Thanks! The test expectations have been updated".colorize(:green)
|
|
241
|
+
else
|
|
242
|
+
puts "Please manually update the test cases and expectations".colorize(:red)
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
data/VERSION.yml
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -115,11 +115,6 @@ Feature: Command Line
|
|
|
115
115
|
And a sass file sass/reset.sass is not mentioned
|
|
116
116
|
And a css file tmp/utilities.css is reported identical
|
|
117
117
|
|
|
118
|
-
Scenario: Installing a pattern into a project
|
|
119
|
-
Given I am using the existing project in test/fixtures/stylesheets/compass
|
|
120
|
-
When I run: compass install compass/pie
|
|
121
|
-
Then a sass file sass/pie.scss is created
|
|
122
|
-
|
|
123
118
|
Scenario: Basic help
|
|
124
119
|
When I run: compass help
|
|
125
120
|
Then I should see the following "primary" commands:
|
|
@@ -179,12 +174,13 @@ Feature: Command Line
|
|
|
179
174
|
| tmp/fonts.css |
|
|
180
175
|
| images/flag-s5b4f509715.png |
|
|
181
176
|
|
|
177
|
+
@now
|
|
182
178
|
Scenario: Watching a project for changes
|
|
183
179
|
Given ruby supports fork
|
|
184
180
|
Given I am using the existing project in test/fixtures/stylesheets/compass
|
|
185
181
|
When I run: compass compile
|
|
186
182
|
And I run in a separate process: compass watch
|
|
187
|
-
And I wait
|
|
183
|
+
And I wait 4 seconds
|
|
188
184
|
And I touch sass/layout.sass
|
|
189
185
|
And I wait 2 seconds
|
|
190
186
|
And I shutdown the other process
|
|
@@ -1,40 +1,358 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
1
|
+
// The list of browsers you want to support.
|
|
2
|
+
// Defaults to all.
|
|
3
|
+
$supported-browsers: browsers() !default;
|
|
3
4
|
|
|
4
|
-
//
|
|
5
|
-
|
|
5
|
+
// The browser usage threshold for features that gracefully degrade
|
|
6
|
+
// Defaults to 1 user in 1,000.
|
|
7
|
+
$graceful-usage-threshold: 0.1 !default;
|
|
6
8
|
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
+
// The browser usage threshold for features that cannot degrade gracefully
|
|
10
|
+
// Defaults to 1 user in 10,000.
|
|
11
|
+
$critical-usage-threshold: 0.01 !default;
|
|
9
12
|
|
|
10
|
-
//
|
|
11
|
-
$
|
|
13
|
+
// Set this to true to generate comments that will explain why a prefix was included or omitted.
|
|
14
|
+
$debug-browser-support: false !default;
|
|
15
|
+
|
|
16
|
+
// Minimum browser versions that must be supported.
|
|
17
|
+
// The keys of this map are any valid browser according to `browsers()`.
|
|
18
|
+
// The values of this map are the min version that is valid for that browser
|
|
19
|
+
// according to `browser-versions($browser)`
|
|
20
|
+
$browser-minimum-versions: (
|
|
21
|
+
'chrome': null,
|
|
22
|
+
'firefox': null,
|
|
23
|
+
'ie': null,
|
|
24
|
+
'safari': null,
|
|
25
|
+
'opera': null
|
|
26
|
+
) !default;
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
// @private
|
|
30
|
+
$default-capability-options: (
|
|
31
|
+
(full-support: true),
|
|
32
|
+
(partial-support: true)
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
// When a prefix is in a selector or directive scope, this is set to the current prefix value.
|
|
36
|
+
$current-prefix: null;
|
|
37
|
+
|
|
38
|
+
// When in a context that only exists in a particular version
|
|
39
|
+
// this variable is set to those versions.
|
|
40
|
+
$current-browser-minimum-versions: ();
|
|
41
|
+
|
|
42
|
+
// The legacy support CSS 2.1 Selectors.
|
|
43
|
+
// Defaults to the $critical-usage-threshold.
|
|
44
|
+
$css-sel2-support-threshold: $critical-usage-threshold !default;
|
|
45
|
+
|
|
46
|
+
// Check if the browser is in scope given the current prefix minimums.
|
|
47
|
+
@function browser-out-of-scope($browser, $version: null) {
|
|
48
|
+
@if not ($current-prefix == null or $current-prefix == browser-prefix($browser)) {
|
|
49
|
+
@if $debug-browser-support {
|
|
50
|
+
@return "The #{$browser} #{$version} is incompatible with #{$current-prefix}."
|
|
51
|
+
} @else {
|
|
52
|
+
@return true;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
$current-min: map-get($current-browser-minimum-versions, $browser);
|
|
56
|
+
@if not ($version and $current-min) {
|
|
57
|
+
// We don't have any versions to compare
|
|
58
|
+
@return false;
|
|
59
|
+
} @else {
|
|
60
|
+
// If the version is less than the current min, it is not supported
|
|
61
|
+
$too-old: compare-browser-versions($browser, $version, $current-min) < 0;
|
|
62
|
+
@if $too-old {
|
|
63
|
+
@if $debug-browser-support {
|
|
64
|
+
@return "The current scope only works with #{$browser} #{$current-min} or greater.";
|
|
65
|
+
} @else {
|
|
66
|
+
@return true;
|
|
67
|
+
}
|
|
68
|
+
} @else {
|
|
69
|
+
@return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Check whether the browser is supported according to the declared minimum support
|
|
75
|
+
// and usage thresholds.
|
|
76
|
+
@function support-legacy-browser($browser, $version, $threshold: $critical-usage-threshold) {
|
|
77
|
+
// Check agaist usage stats and declared minimums
|
|
78
|
+
$min-version: map-get($browser-minimum-versions, $browser);
|
|
79
|
+
@return omitted-usage($browser, $version) > $threshold or
|
|
80
|
+
($min-version and compare-browser-versions($browser, $version, $min-version) >= 0);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Include content for a legacy browser
|
|
84
|
+
// Version can be a single version string or a list of versions ordered from oldest to newest.
|
|
85
|
+
@mixin for-legacy-browser($browser, $version, $threshold: $critical-usage-threshold, $mins: ($browser: $version)) {
|
|
86
|
+
$latest-version: nth($version, -1);
|
|
87
|
+
@if not browser-out-of-scope($browser, $latest-version) and
|
|
88
|
+
support-legacy-browser($browser, $latest-version, $threshold)
|
|
89
|
+
{
|
|
90
|
+
@if $debug-browser-support {
|
|
91
|
+
/* Content for #{$browser} #{$version}.
|
|
92
|
+
Min version: #{map-get($browser-minimum-versions, $browser) or unspecified}.
|
|
93
|
+
User threshold to keep: #{$threshold}%. If #{$browser} #{$version} and below are omitted: #{omitted-usage($browser, $version)}%. */
|
|
94
|
+
}
|
|
95
|
+
@include with-browser-minimums(map-merge($current-browser-minimum-versions, $mins)) {
|
|
96
|
+
@content;
|
|
97
|
+
}
|
|
98
|
+
} @else if $debug-browser-support and browser-out-of-scope($browser, $latest-version) {
|
|
99
|
+
/* Content for #{$browser} #{$version} omitted.
|
|
100
|
+
Not allowed in the current scope: #{browser-out-of-scope($browser, $latest-version)} */
|
|
101
|
+
} @else if $debug-browser-support and not support-legacy-browser($browser, $latest-version, $threshold) {
|
|
102
|
+
@if omitted-usage($browser, $version) > $threshold {
|
|
103
|
+
/* Content for #{$browser} #{$version} omitted.
|
|
104
|
+
User threshold to keep: #{$threshold}%. If #{$browser} #{$version} and below are omitted: #{omitted-usage($browser, $version)}%. */
|
|
105
|
+
} @else {
|
|
106
|
+
/* Content for #{$browser} #{$version} omitted.
|
|
107
|
+
Minimum support is #{map-get($browser-minimum-versions, $browser)}. */
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Renders the content once if any of the legacy browsers are supported.
|
|
113
|
+
@mixin for-legacy-browsers($browsers, $threshold: $critical-usage-threshold) {
|
|
114
|
+
$rendered: false;
|
|
115
|
+
@each $browser, $version in $browsers {
|
|
116
|
+
@if not $rendered {
|
|
117
|
+
@include for-legacy-browser($browser, $version, $threshold, $mins: $browsers) {
|
|
118
|
+
$rendered: true;
|
|
119
|
+
@content;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// If there's a prefix context in scope, this will only output the content if the prefix matches.
|
|
126
|
+
// Otherwise, sets the current prefix scope and outputs the content.
|
|
127
|
+
@mixin with-prefix($prefix) {
|
|
128
|
+
@if $current-prefix {
|
|
129
|
+
@if $current-prefix == $prefix {
|
|
130
|
+
@content;
|
|
131
|
+
} @else if $debug-browser-support {
|
|
132
|
+
/* Omitting content for #{$prefix} because #{$current-prefix} is already in scope. */
|
|
133
|
+
}
|
|
134
|
+
} @else {
|
|
135
|
+
$current-prefix: $prefix;
|
|
136
|
+
@content;
|
|
137
|
+
$current-prefix: null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@function prefixes-for-capability($capability, $threshold, $capability-options: $default-capability-options) {
|
|
142
|
+
$result: ();
|
|
143
|
+
@each $prefix in browser-prefixes($supported-browsers) {
|
|
144
|
+
$result: map-merge($result,
|
|
145
|
+
($prefix: use-prefix($prefix, $capability, $threshold, $capability-options)));
|
|
146
|
+
}
|
|
147
|
+
@return $result;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Yields to the mixin content once for each prefix required.
|
|
151
|
+
// The current prefix is set to the $current-prefix global for use by the included content.
|
|
152
|
+
// Also yields to the content once with $current-prefix set to null for the official version
|
|
153
|
+
// as long as there's not already a prefix in scope.
|
|
154
|
+
@mixin with-each-prefix($capability, $threshold, $capability-options: $default-capability-options) {
|
|
155
|
+
@each $prefix, $should-use-prefix in prefixes-for-capability($capability, $threshold, $capability-options) {
|
|
156
|
+
@if $should-use-prefix {
|
|
157
|
+
@if $debug-browser-support and type-of($should-use-prefix) == list {
|
|
158
|
+
/* Capability #{$capability} is prefixed with #{$prefix} because #{$should-use-prefix} is required. */
|
|
159
|
+
} @else if $debug-browser-support and type-of($should-use-prefix) == number {
|
|
160
|
+
/* Capability #{$capability} is prefixed with #{$prefix} because omitting it would affect #{$should-use-prefix}% of users and the threshold is #{$threshold}%. */
|
|
161
|
+
}
|
|
162
|
+
@include with-prefix($prefix) {
|
|
163
|
+
@include with-browser-minimums($capability) {
|
|
164
|
+
@content;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
@if not $current-prefix {
|
|
170
|
+
@include with-browser-minimums($capability) {
|
|
171
|
+
@content;
|
|
172
|
+
}
|
|
173
|
+
} @else if $debug-browser-support {
|
|
174
|
+
/* Not including prefix-free content for #{$capability} because the #{$current-prefix} prefix is in scope. */
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Returns true if at least one browser-version pair in $subset-mins
|
|
179
|
+
// is a higher (or same) version than the browser-version pairs in $mins.
|
|
180
|
+
@function has-browser-subset($mins, $subset-mins) {
|
|
181
|
+
$found-mismatch: false;
|
|
182
|
+
@each $browser, $subset-min-version in $subset-mins {
|
|
183
|
+
$min-version: map-get($mins, $browser);
|
|
184
|
+
@if $min-version {
|
|
185
|
+
@if compare-browser-versions($browser, $min-version, $subset-min-version) <= 0 {
|
|
186
|
+
@return true;
|
|
187
|
+
} @else {
|
|
188
|
+
$found-mismatch: true
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
@return not $found-mismatch;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
@function merge-browser-minumums($mins, $new-mins) {
|
|
196
|
+
@each $browser, $new-min in $new-mins {
|
|
197
|
+
$old-min: map-get($mins, $browser);
|
|
198
|
+
@if $old-min {
|
|
199
|
+
$max-min: if(compare-browser-versions($browser, $old-min, $new-min) > 0,
|
|
200
|
+
$old-min, $new-min);
|
|
201
|
+
$mins: map-merge($mins, ($browser: $max-min));
|
|
202
|
+
} @else {
|
|
203
|
+
$mins: map-merge($mins, ($browser: $new-min));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
@return $mins;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// If passed a map, that will be the new browser minimums.
|
|
210
|
+
// Otherwise a minimum map will be created based on the given capability and prefix
|
|
211
|
+
// using the `browser-minimums($capability, $prefix)` function.
|
|
212
|
+
//
|
|
213
|
+
// If there are current minimums in scope and the new minimums have some overlap
|
|
214
|
+
// with the current, then the minimums will be set to the max version of each browser.
|
|
215
|
+
// If there is no overlap, then the content will not be rendered.
|
|
216
|
+
@mixin with-browser-minimums($capability, $prefix: $current-prefix) {
|
|
217
|
+
$new-mins: null;
|
|
218
|
+
@if type-of($capability) == map {
|
|
219
|
+
$new-mins: $capability;
|
|
220
|
+
} @else {
|
|
221
|
+
$new-mins: browser-minimums($capability, $prefix);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
@if has-browser-subset($current-browser-minimum-versions, $new-mins) {
|
|
225
|
+
$old-minimums: $current-browser-minimum-versions;
|
|
226
|
+
$current-browser-minimum-versions: merge-browser-minumums($old-minimums, $new-mins);
|
|
227
|
+
@content;
|
|
228
|
+
$current-browser-minimum-versions: $old-minimums;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Returns true if the prefixed usage stats for the capability exceed the threshold
|
|
233
|
+
// or if the minimum version for a supported browser would require a prefix for the capability.
|
|
234
|
+
@function use-prefix($prefix, $capability, $threshold, $capability-options: $default-capability-options) {
|
|
235
|
+
$usage: prefix-usage($prefix, $capability, $capability-options);
|
|
236
|
+
@if $usage > $threshold {
|
|
237
|
+
@return $usage;
|
|
238
|
+
} @else {
|
|
239
|
+
@each $browser in browsers($prefix) {
|
|
240
|
+
@if index($supported-browsers, $browser) {
|
|
241
|
+
$min-version: map-get($browser-minimum-versions, $browser);
|
|
242
|
+
@if $min-version {
|
|
243
|
+
$actual-prefix: browser-requires-prefix($browser, $min-version, $capability, $capability-options);
|
|
244
|
+
@if $actual-prefix and $prefix == $actual-prefix {
|
|
245
|
+
@return $browser $min-version;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
@return false;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
@function prefix-identifier($ident, $prefix: $current-prefix) {
|
|
255
|
+
@return unquote("#{$prefix}#{if($prefix, '-', null)}#{$ident}");
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Output a property and value using the current prefix.
|
|
259
|
+
// It will be unprefixed if $current-prefix is null.
|
|
260
|
+
@mixin prefix-prop($property, $value, $prefix: $current-prefix) {
|
|
261
|
+
#{prefix-identifier($property, $prefix)}: $value;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Emit a set of properties with the prefix governed by the capability and usage threshold given.
|
|
265
|
+
//
|
|
266
|
+
// Example:
|
|
267
|
+
//
|
|
268
|
+
// @include prefixed-properties(css-animation, $animation-support-threshold,
|
|
269
|
+
// (animation-name: foo, animation-duration: 2s)
|
|
270
|
+
// );
|
|
271
|
+
@mixin prefixed-properties($capability, $threshold, $properties, $capability-options: $default-capability-options) {
|
|
272
|
+
@include with-each-prefix($capability, $threshold, $capability-options) {
|
|
273
|
+
@each $prop, $value in $properties {
|
|
274
|
+
@include prefix-prop($prop, $value);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
// @private
|
|
281
|
+
@function warn-about-old-variables() {
|
|
282
|
+
$old-variables-in-use: ();
|
|
283
|
+
@each $old-variable-name in
|
|
284
|
+
(legacy-support-for-ie, legacy-support-for-ie6, legacy-support-for-ie7,
|
|
285
|
+
legacy-support-for-ie8, legacy-support-for-mozilla, legacy-support-for-webkit,
|
|
286
|
+
experimental-support-for-mozilla, experimental-support-for-webkit,
|
|
287
|
+
experimental-support-for-opera, experimental-support-for-microsoft,
|
|
288
|
+
experimental-support-for-khtml, experimental-support-for-svg)
|
|
289
|
+
{
|
|
290
|
+
@if global-variable-exists($old-variable-name) {
|
|
291
|
+
$old-variables-in-use: append($old-variables-in-use,
|
|
292
|
+
unquote("$#{$old-variable-name}"), comma);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
@if length($old-variables-in-use) > 0 {
|
|
296
|
+
@warn "Compass has changed how browser support is configured. " +
|
|
297
|
+
"See the CHANGELOG for more details. The following configuration variables " +
|
|
298
|
+
"are no longer supported: #{$old-variables-in-use}."
|
|
299
|
+
}
|
|
300
|
+
@return $old-variables-in-use;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// @private
|
|
304
|
+
@function warn-about-pie-removal() {
|
|
305
|
+
@if global-variable-exists(experimental-support-for-pie) {
|
|
306
|
+
@warn "Compass no longer supports css3pie.";
|
|
307
|
+
}
|
|
308
|
+
@return true;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Enable browser support debugging within the content block.
|
|
312
|
+
// Or you can enable it for the whole stylesheet by setting `$debug-browser-support` to true.
|
|
313
|
+
@mixin with-browser-support-debugging {
|
|
314
|
+
$current-status: $debug-browser-support;
|
|
315
|
+
$debug-browser-support: true;
|
|
316
|
+
@content;
|
|
317
|
+
$debug-browser-support: $current-status;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Set a default value if the given arglist is empty
|
|
321
|
+
@function set-arglist-default($arglist, $default) {
|
|
322
|
+
$default-index: index($arglist, default);
|
|
323
|
+
@if $default-index {
|
|
324
|
+
$arglist: set-nth($arglist, $default-index, $default)
|
|
325
|
+
}
|
|
326
|
+
@return if(length($arglist) > 0, $arglist, $default);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
// @private
|
|
331
|
+
$old-variable-warnings-issued: warn-about-old-variables() !default;
|
|
12
332
|
|
|
13
333
|
// @private
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
//
|
|
26
|
-
$
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
//
|
|
32
|
-
$
|
|
33
|
-
|
|
34
|
-
$
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
// Support for CSS PIE in experimental css3 properties (-pie).
|
|
40
|
-
$experimental-support-for-pie : false !default;
|
|
334
|
+
$pie-removal-warnging-issued: warn-about-pie-removal() !default;
|
|
335
|
+
|
|
336
|
+
// @private
|
|
337
|
+
@function warn-about-useless-prefix-arguments($moz: null, $webkit: null, $o: null, $khtml: null, $official: null) {
|
|
338
|
+
@if $moz != null or $webkit != null or $o != null or $khtml != null or $official != null {
|
|
339
|
+
@warn "Browser prefix arguments to this mixin are no longer used and " +
|
|
340
|
+
"will be removed in the next release.";
|
|
341
|
+
}
|
|
342
|
+
@return true;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// coerce a list to be comma delimited or make a new, empty comma delimited list.
|
|
346
|
+
@function comma-list($list: ()) {
|
|
347
|
+
@return join((), $list, comma);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// @private Returns the legacy value for a given box-model
|
|
351
|
+
// - Used by background-clip and -origin.
|
|
352
|
+
@function legacy-box($box) {
|
|
353
|
+
$box: unquote($box);
|
|
354
|
+
@if $box == padding-box { $box: padding; }
|
|
355
|
+
@if $box == border-box { $box: border; }
|
|
356
|
+
@if $box == content-box { $box: content; }
|
|
357
|
+
@return $box;
|
|
358
|
+
}
|