compass 1.0.0.alpha.21 → 1.0.0.rc.0

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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +11 -5
  3. data/features/command_line.feature +5 -25
  4. data/features/step_definitions/command_line_steps.rb +3 -3
  5. data/lib/compass.rb +2 -2
  6. data/lib/compass/actions.rb +4 -3
  7. data/lib/compass/commands/update_project.rb +50 -45
  8. data/lib/compass/commands/watch_project.rb +62 -13
  9. data/lib/compass/compiler.rb +2 -0
  10. data/lib/compass/configuration/adapters.rb +21 -0
  11. data/lib/compass/configuration/helpers.rb +8 -0
  12. data/lib/compass/deprecation.rb +19 -0
  13. data/lib/compass/exec/global_options_parser.rb +0 -4
  14. data/lib/compass/generated_version.rb +4 -0
  15. data/lib/compass/logger.rb +31 -18
  16. data/lib/compass/sass_compiler.rb +134 -0
  17. data/lib/compass/sass_extensions/functions/sprites.rb +3 -3
  18. data/lib/compass/sprite_importer.rb +1 -1
  19. data/lib/compass/version.rb +29 -31
  20. data/test/fixtures/stylesheets/compass/css/background-clip.css +2 -0
  21. data/test/fixtures/stylesheets/compass/css/background-origin.css +2 -0
  22. data/test/fixtures/stylesheets/compass/css/background-size.css +3 -0
  23. data/test/fixtures/stylesheets/compass/css/browser-support.css +22 -11
  24. data/test/fixtures/stylesheets/compass/css/filters.css +6 -6
  25. data/test/fixtures/stylesheets/compass/css/grid_background.css +4 -0
  26. data/test/fixtures/stylesheets/compass/css/support.css +6 -6
  27. data/test/fixtures/stylesheets/compass/css/transition.css +19 -0
  28. data/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_ems.css +1 -0
  29. data/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_px.css +1 -0
  30. data/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_rems.css +1 -0
  31. data/test/fixtures/stylesheets/sourcemaps/css/another_simple.css +1 -0
  32. data/test/fixtures/stylesheets/sourcemaps/css/another_simple.css.map +2 -1
  33. data/test/fixtures/stylesheets/sourcemaps/css/simple.css +1 -0
  34. data/test/fixtures/stylesheets/sourcemaps/css/simple.css.map +2 -1
  35. data/test/fixtures/stylesheets/sourcemaps/css/with_libraries.css +1 -0
  36. data/test/fixtures/stylesheets/sourcemaps/css/with_libraries.css.map +2 -1
  37. data/test/integrations/compass_test.rb +5 -4
  38. data/test/units/caniuse_test.rb +8 -2
  39. data/test/units/command_line_test.rb +3 -3
  40. data/test/units/compiler_test.rb +7 -2
  41. data/test/units/configuration_test.rb +1 -1
  42. metadata +9 -22
  43. data/RELEASE_VERSION +0 -1
  44. data/VERSION +0 -1
  45. data/lib/compass/watcher.rb +0 -11
  46. data/lib/compass/watcher/compiler.rb +0 -60
  47. data/lib/compass/watcher/project_watcher.rb +0 -179
  48. data/lib/compass/watcher/watch.rb +0 -51
  49. data/test/fixtures/stylesheets/valid/css/another_simple.css +0 -4
  50. data/test/fixtures/stylesheets/valid/css/simple.css +0 -4
  51. data/test/units/watcher/compiler_test.rb +0 -39
  52. data/test/units/watcher/project_watcher_test.rb +0 -85
  53. data/test/units/watcher/watch_test.rb +0 -42
@@ -95,9 +95,17 @@ module Compass
95
95
  end
96
96
  end
97
97
 
98
+ # @deprecated
98
99
  def compiler
100
+ Compass::Deprecation.deprecated!(:compiler_accessor,
101
+ "Compass.compiler is deprecated. Use Compass.sass_compiler instead.")
102
+ Compass::Deprecation.mark_as_issued(:compass_compiler_constructor)
99
103
  Compass::Compiler.new(*Compass.configuration.to_compiler_arguments)
100
104
  end
105
+
106
+ def sass_compiler(*args)
107
+ Compass::SassCompiler.new(*args)
108
+ end
101
109
  end
102
110
  end
103
111
 
@@ -0,0 +1,19 @@
1
+ module Compass
2
+ module Deprecation
3
+ class << self
4
+ attr_accessor :issued_deprecations
5
+ end
6
+ self.issued_deprecations = {}
7
+
8
+ def self.deprecated!(identifier, message)
9
+ return if Deprecation.issued_deprecations[identifier]
10
+ Deprecation.issued_deprecations[identifier] = true
11
+ warn message
12
+ warn "Called from #{caller[1]}"
13
+ end
14
+
15
+ def self.mark_as_issued(identifier)
16
+ Deprecation.issued_deprecations[identifier] = true
17
+ end
18
+ end
19
+ end
@@ -45,10 +45,6 @@ module Compass::Exec::GlobalOptionsParser
45
45
  self.options[:force] = true
46
46
  end
47
47
 
48
- opts.on('--dry-run', :NONE, 'Dry Run. Tells you what it plans to do.') do
49
- self.options[:dry_run] = true
50
- end
51
-
52
48
  opts.on('--boring', :NONE, 'Turn off colorized output.') do
53
49
  self.options[:color_output] = false
54
50
  end
@@ -0,0 +1,4 @@
1
+ module Compass
2
+ VERSION = "1.0.0.rc.0"
3
+ VERSION_NAME = "Polaris"
4
+ end
@@ -2,9 +2,7 @@ module Compass
2
2
 
3
3
  class Logger
4
4
 
5
- DEFAULT_ACTIONS = [:directory, :exists, :remove, :create, :overwrite, :compile, :error, :identical, :warning]
6
-
7
- COLORS = { :clear => 0, :red => 31, :green => 32, :yellow => 33 }
5
+ COLORS = { :clear => 0, :red => 31, :green => 32, :yellow => 33, :blue => 34 }
8
6
 
9
7
  ACTION_COLORS = {
10
8
  :error => :red,
@@ -12,8 +10,14 @@ module Compass
12
10
  :info => :green,
13
11
  :compile => :green,
14
12
  :overwrite => :yellow,
13
+ :modified => :yellow,
14
+ :clean => :yellow,
15
+ :write => :green,
15
16
  :create => :green,
16
17
  :remove => :yellow,
18
+ :delete => :yellow,
19
+ :deleted => :yellow,
20
+ :created => :yellow,
17
21
  :exists => :green,
18
22
  :directory => :green,
19
23
  :identical => :green,
@@ -21,8 +25,9 @@ module Compass
21
25
  :unchanged => :yellow
22
26
  }
23
27
 
28
+ DEFAULT_ACTIONS = ACTION_COLORS.keys
24
29
 
25
- attr_accessor :actions, :options
30
+ attr_accessor :actions, :options, :time
26
31
 
27
32
  def initialize(*actions)
28
33
  self.options = actions.last.is_a?(Hash) ? actions.pop : {}
@@ -33,6 +38,9 @@ module Compass
33
38
  # Record an action that has occurred
34
39
  def record(action, *arguments)
35
40
  msg = ""
41
+ if time
42
+ msg << Time.now.strftime("%I:%M:%S.%3N %p")
43
+ end
36
44
  msg << color(ACTION_COLORS[action]) if Compass.configuration.color_output
37
45
  msg << "#{action_padding(action)}#{action}"
38
46
  msg << color(:clear) if Compass.configuration.color_output
@@ -40,22 +48,26 @@ module Compass
40
48
  log msg
41
49
  end
42
50
 
51
+ def green
52
+ wrap(:green) { yield }
53
+ end
54
+
43
55
  def red
44
- $stderr.write(color(:red))
45
- $stdout.write(color(:red))
46
- yield
47
- ensure
48
- $stderr.write(color(:clear))
49
- $stdout.write(color(:clear))
56
+ wrap(:red) { yield }
50
57
  end
51
58
 
52
59
  def yellow
53
- $stderr.write(color(:yellow))
54
- $stdout.write(color(:yellow))
60
+ wrap(:yellow) { yield }
61
+ end
62
+
63
+ def wrap(c, reset_to = :clear)
64
+ $stderr.write(color(c))
65
+ $stdout.write(color(c))
55
66
  yield
56
67
  ensure
57
- $stderr.write(color(:clear))
58
- $stdout.write(color(:clear))
68
+ $stderr.write(color(reset_to))
69
+ $stdout.write(color(reset_to))
70
+ $stdout.flush
59
71
  end
60
72
 
61
73
  def color(c)
@@ -70,11 +82,13 @@ module Compass
70
82
  end
71
83
  end
72
84
 
85
+ # Emit a log message without a trailing newline
73
86
  def emit(msg)
74
87
  print msg
88
+ $stdout.flush
75
89
  end
76
90
 
77
- # Emit a log message
91
+ # Emit a log message with a trailing newline
78
92
  def log(msg)
79
93
  puts msg
80
94
  $stdout.flush
@@ -91,15 +105,14 @@ module Compass
91
105
  end
92
106
  end
93
107
 
94
- class NullLogger
108
+ class NullLogger < Logger
95
109
  def record(*args)
96
110
  end
97
111
 
98
112
  def log(msg)
99
113
  end
100
114
 
101
- def red
102
- yield
115
+ def emit(msg)
103
116
  end
104
117
  end
105
118
  end
@@ -0,0 +1,134 @@
1
+ require 'sass/plugin'
2
+
3
+ class Compass::SassCompiler
4
+
5
+ include Compass::Actions
6
+
7
+ attr_writer :logger
8
+ attr_reader :error_count
9
+ attr_accessor :config
10
+ attr_accessor :display_compilation_times
11
+ attr_accessor :working_path
12
+ attr_accessor :only_sass_files
13
+
14
+ def initialize(options = {}, config = Compass.configuration)
15
+ options = options.dup
16
+ self.config = config
17
+ self.display_compilation_times = options.delete(:time)
18
+ self.working_path = options.delete(:working_path) || Dir.pwd
19
+ self.only_sass_files = options.delete(:only_sass_files) || []
20
+ plugin_options = config.to_sass_plugin_options.merge(options)
21
+ if only_sass_files.any?
22
+ plugin_options[:template_location] = []
23
+ plugin_options[:load_paths] = config.sass_load_paths
24
+ end
25
+ plugin_options[:always_update] = true if options.delete(:force)
26
+ @compiler = Sass::Plugin::Compiler.new(plugin_options)
27
+ @start_times = {}
28
+ @error_count = 0
29
+
30
+ public_methods(true).grep(/^when_/).each do |callback|
31
+ @compiler.send(callback.to_s.sub(/^when_/, 'on_')) {|*args| send(callback, *args) }
32
+ end
33
+ end
34
+
35
+ def compile!
36
+ @compiler.update_stylesheets(individual_files)
37
+ end
38
+
39
+ def watch!(options = {}, &block)
40
+ skip_initial_update = options.fetch(:skip_initial_update, false)
41
+ begin
42
+ @compiler.watch(individual_files, options.merge(:skip_initial_update => skip_initial_update), &block)
43
+ rescue Sass::SyntaxError => e
44
+ skip_initial_update = true
45
+ retry
46
+ end
47
+ end
48
+
49
+ def individual_files
50
+ only_sass_files.map {|sass_file| [sass_file, corresponding_css_file(sass_file)]}
51
+ end
52
+
53
+ def clean!
54
+ @compiler.clean(individual_files)
55
+ end
56
+
57
+ def file_list
58
+ @compiler.file_list(individual_files)
59
+ end
60
+
61
+ def when_updating_stylesheets(individual_files)
62
+ @start_times = {}
63
+ @error_count = 0
64
+ end
65
+
66
+ def when_compilation_starting(sass_file, css, sourcemap)
67
+ @start_times[sass_file] = Time.now
68
+ end
69
+
70
+ def when_template_created(sass_file)
71
+ logger.record :created, relativize(sass_file)
72
+ end
73
+
74
+ def when_template_deleted(sass_file)
75
+ logger.record :deleted, relativize(sass_file)
76
+ end
77
+
78
+ def when_template_modified(sass_file)
79
+ logger.record :modified, relativize(sass_file)
80
+ end
81
+
82
+ def when_updated_stylesheet(sass_file, css, sourcemap)
83
+ if css && display_compilation_times && @start_times[sass_file]
84
+ duration = ((Time.now - @start_times[sass_file]) * 1000).round / 1000.0
85
+ logger.record :write, "#{relativize(css)} (#{duration}s)"
86
+ else
87
+ logger.record :write, relativize(css) if css
88
+ end
89
+ config.run_stylesheet_saved(css) if css
90
+
91
+ logger.record :write, relativize(sourcemap) if sourcemap
92
+ config.run_sourcemap_saved(sourcemap) if sourcemap
93
+ end
94
+
95
+ def when_creating_directory(dirname)
96
+ logger.record :directory, relativize(dirname)
97
+ end
98
+
99
+ def when_deleting_css(filename)
100
+ logger.record :delete, relativize(filename)
101
+ config.run_stylesheet_removed(filename) if filename
102
+ end
103
+
104
+ def when_deleting_sourcemap(filename)
105
+ logger.record :delete, relativize(filename)
106
+ config.run_sourcemap_removed(filename) if filename
107
+ end
108
+
109
+ def when_compilation_error(error, sass_file, css_file, sourcemap_file)
110
+ @error_count += 1
111
+ if relativize(error.sass_filename) == relativize(sass_file)
112
+ logger.record :error, "#{relativize(error.sass_filename)} (Line #{error.sass_line}: #{error.message})"
113
+ else
114
+ logger.record :error, "#{relativize(sass_file)} (Line #{error.sass_line} of #{relativize(error.sass_filename)}: #{error.message})"
115
+ end
116
+ config.run_stylesheet_error(sass_file, error.message)
117
+ end
118
+
119
+ def logger
120
+ @logger ||= Compass::Logger.new
121
+ end
122
+
123
+ def corresponding_css_file(sass_file)
124
+ "#{config.css_path}/#{stylesheet_name(sass_file)}.css"
125
+ end
126
+
127
+ def stylesheet_name(sass_file)
128
+ if sass_file.index(config.sass_path) == 0
129
+ sass_file[(config.sass_path.length + 1)..-6].sub(/\.css$/,'')
130
+ else
131
+ raise Compass::Error, "Individual stylesheets must be in the sass directory."
132
+ end
133
+ end
134
+ end
@@ -120,9 +120,9 @@ module Compass::SassExtensions::Functions::Sprites
120
120
  verify_map(map, "sprite")
121
121
  verify_sprite(sprite)
122
122
  if image = map.image_for(sprite.value)
123
- image_path = Pathname.new(File.expand_path(image.file, Compass.configuration.images_path))
124
- generated_images_path = Pathname.new(File.expand_path(Compass.configuration.generated_images_path))
125
- quoted_string(image_path.relative_path_from(generated_images_path).to_s)
123
+ image_path = Pathname.new(File.expand_path(image.file))
124
+ images_path = Pathname.new(File.expand_path(Compass.configuration.images_path))
125
+ quoted_string(image_path.relative_path_from(images_path).to_s)
126
126
  else
127
127
  missing_image!(map, sprite)
128
128
  end
@@ -52,7 +52,7 @@ module Compass
52
52
  [self.class.name + ":sprite:" + File.dirname(File.expand_path(uri)), File.basename(uri)]
53
53
  end
54
54
 
55
- def public_url
55
+ def public_url(*args)
56
56
  nil
57
57
  end
58
58
 
@@ -1,44 +1,42 @@
1
+ require 'compass/generated_version'
1
2
  module Compass
2
3
  module Version
3
- # Returns a hash representing the semantic version of the current compass release.
4
- # See http://semver.org/ for more details.
5
- #
6
- # The :major, :minor, and :patch keys have their respective release numbers.
7
- # The :string key contains a human-readable string representation of the version.
8
- # The :prerelease key will have the current pre-release state
9
- # The :build key will have the current pre-release build
10
- def version
11
- @version ||= read_version
12
- end
13
-
14
- protected
15
-
16
4
  def scope(file) # :nodoc:
17
5
  File.join(File.dirname(__FILE__), '..', '..', file)
18
6
  end
19
7
 
20
- def read_version
21
- version_file = File.exist?(scope("RELEASE_VERSION")) ? scope("RELEASE_VERSION") : scope("VERSION")
22
- v = File.read(version_file).strip
23
- segments = v.split(".")
24
- version_hash = {:string => v}
25
- version_hash[:major] = segments.shift
26
- version_hash[:minor] = segments.shift
27
- version_hash[:patch] = segments.shift
28
- version_hash[:prerelease] = segments.shift
29
- version_hash[:build] = segments.shift
30
- version_hash
8
+ def parse_version(version, name)
9
+ nil_or_int = lambda{|i| i.nil? ? nil : i.to_i}
10
+ segments = version.split(".")
11
+ {
12
+ :string => version,
13
+ :name => name,
14
+ :major => nil_or_int.call(segments.shift),
15
+ :minor => nil_or_int.call(segments.shift),
16
+ :patch => nil_or_int.call(segments.shift),
17
+ :state => segments.shift,
18
+ :iteration => nil_or_int.call(segments.shift)
19
+ }
20
+ end
21
+
22
+ # Returns a hash representing the version.
23
+ # The :major, :minor, and :teeny keys have their respective numbers.
24
+ # The :string key contains a human-readable string representation of the version.
25
+ # The :rev key will have the current revision hash.
26
+ #
27
+ # This method swiped from Haml and then modified, some credit goes to Nathan Weizenbaum
28
+ def version
29
+ Compass::VERSION_DETAILS
31
30
  end
32
31
  end
33
32
 
34
33
  extend Compass::Version
35
34
 
36
- def self.const_missing(const)
37
- # This avoid reading from disk unless the VERSION is requested.
38
- if const == :VERSION
39
- version[:string]
40
- else
41
- super
42
- end
35
+ unless defined?(VERSION)
36
+ VERSION = File.read(scope("VERSION")).strip
37
+ VERSION_NAME = File.read(scope("VERSION_NAME")).strip
43
38
  end
39
+
40
+ VERSION_DETAILS = parse_version(VERSION, VERSION_NAME)
41
+
44
42
  end
@@ -1,9 +1,11 @@
1
1
  .background-clip {
2
2
  -moz-background-clip: border;
3
+ -o-background-clip: border-box;
3
4
  -webkit-background-clip: border;
4
5
  background-clip: border-box; }
5
6
 
6
7
  .background-clip-multiple {
7
8
  -moz-background-clip: border, padding, content;
9
+ -o-background-clip: border-box, padding-box, content-box;
8
10
  -webkit-background-clip: border, padding, content;
9
11
  background-clip: border-box, padding-box, content-box; }
@@ -1,9 +1,11 @@
1
1
  .background-origin {
2
2
  -moz-background-origin: border;
3
+ -o-background-origin: border-box;
3
4
  -webkit-background-origin: border;
4
5
  background-origin: border-box; }
5
6
 
6
7
  .background-origin-multiple {
7
8
  -moz-background-origin: border, padding, content;
9
+ -o-background-origin: border-box, padding-box, content-box;
8
10
  -webkit-background-origin: border, padding, content;
9
11
  background-origin: border-box, padding-box, content-box; }
@@ -1,14 +1,17 @@
1
1
  .background-size-default {
2
2
  -moz-background-size: 100% auto;
3
+ -o-background-size: 100% auto;
3
4
  -webkit-background-size: 100% auto;
4
5
  background-size: 100% auto; }
5
6
 
6
7
  .background-size-single {
7
8
  -moz-background-size: 50% 25%;
9
+ -o-background-size: 50% 25%;
8
10
  -webkit-background-size: 50% 25%;
9
11
  background-size: 50% 25%; }
10
12
 
11
13
  .background-size-multiple {
12
14
  -moz-background-size: 4em 3em, 100% auto, 50%;
15
+ -o-background-size: 4em 3em, 100% auto, 50%;
13
16
  -webkit-background-size: 4em 3em, 100% auto, 50%;
14
17
  background-size: 4em 3em, 100% auto, 50%; }
@@ -7,6 +7,7 @@
7
7
  border-radius: -webkit;
8
8
  border-radius-unprefixed-at: "2.2";
9
9
  css-animation: -webkit;
10
+ css-appearance: -webkit;
10
11
  css-boxshadow: -webkit;
11
12
  css-boxshadow-unprefixed-at: "4";
12
13
  css-canvas: -webkit;
@@ -31,8 +32,9 @@
31
32
  user-select-none: -webkit; }
32
33
 
33
34
  .android-chrome {
34
- versions: "0";
35
+ versions: "36";
35
36
  css-animation: -webkit;
37
+ css-appearance: -webkit;
36
38
  css-canvas: -webkit;
37
39
  css-filters: -webkit;
38
40
  css-masks: -webkit;
@@ -42,12 +44,12 @@
42
44
  intrinsic-width: -webkit;
43
45
  multicolumn: -webkit;
44
46
  text-stroke: -webkit;
45
- transforms2d: -webkit;
46
47
  transforms3d: -webkit;
47
48
  user-select-none: -webkit; }
48
49
 
49
50
  .android-firefox {
50
- versions: "0";
51
+ versions: "31";
52
+ css-appearance: -moz;
51
53
  css-hyphens: -moz;
52
54
  css-placeholder: -moz;
53
55
  css3-tabsize: -moz;
@@ -64,6 +66,7 @@
64
66
  border-image-unprefixed-at: "10";
65
67
  calc: -webkit;
66
68
  css-animation: -webkit;
69
+ css-appearance: -webkit;
67
70
  css-boxshadow: -webkit;
68
71
  css-boxshadow-unprefixed-at: "10";
69
72
  css-canvas: -webkit;
@@ -86,7 +89,7 @@
86
89
  user-select-none: -webkit; }
87
90
 
88
91
  .chrome {
89
- versions: "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "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";
92
+ versions: "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "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";
90
93
  border-image: -webkit;
91
94
  border-image-unprefixed-at: "16";
92
95
  border-radius: -webkit;
@@ -94,6 +97,7 @@
94
97
  calc: -webkit;
95
98
  calc-unprefixed-at: "26";
96
99
  css-animation: -webkit;
100
+ css-appearance: -webkit;
97
101
  css-boxshadow: -webkit;
98
102
  css-boxshadow-unprefixed-at: "10";
99
103
  css-canvas: -webkit;
@@ -124,7 +128,7 @@
124
128
  user-select-none: -webkit; }
125
129
 
126
130
  .firefox {
127
- versions: "2", "3", "3.5", "3.6", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33";
131
+ versions: "2", "3", "3.5", "3.6", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34";
128
132
  background-img-opts: -moz;
129
133
  background-img-opts-unprefixed-at: "4";
130
134
  border-image: -moz;
@@ -135,6 +139,7 @@
135
139
  calc-unprefixed-at: "16";
136
140
  css-animation: -moz;
137
141
  css-animation-unprefixed-at: "16";
142
+ css-appearance: -moz;
138
143
  css-boxshadow: -moz;
139
144
  css-boxshadow-unprefixed-at: "4";
140
145
  css-gradients: -moz;
@@ -152,6 +157,7 @@
152
157
  css3-boxsizing-unprefixed-at: "29";
153
158
  css3-tabsize: -moz;
154
159
  font-feature: -moz;
160
+ font-feature-unprefixed-at: "32";
155
161
  inline-block: prefix-no-longer-needed;
156
162
  inline-block-unprefixed-at: "3";
157
163
  intrinsic-width: -moz;
@@ -190,6 +196,7 @@
190
196
  calc: -webkit;
191
197
  calc-unprefixed-at: "7.0-7.1";
192
198
  css-animation: -webkit;
199
+ css-appearance: -webkit;
193
200
  css-boxshadow: -webkit;
194
201
  css-boxshadow-unprefixed-at: "5.0-5.1";
195
202
  css-canvas: -webkit;
@@ -210,7 +217,6 @@
210
217
  css3-boxsizing: -webkit;
211
218
  css3-boxsizing-unprefixed-at: "5.0-5.1";
212
219
  flexbox: -webkit;
213
- font-feature: -webkit;
214
220
  intrinsic-width: -webkit;
215
221
  multicolumn: -webkit;
216
222
  text-size-adjust: -webkit;
@@ -226,6 +232,7 @@
226
232
  border-image: -webkit;
227
233
  border-image-unprefixed-at: "15";
228
234
  css-animation: -webkit;
235
+ css-appearance: -webkit;
229
236
  css-canvas: -webkit;
230
237
  css-filters: -webkit;
231
238
  css-gradients: -webkit;
@@ -250,7 +257,9 @@
250
257
  text-overflow-unprefixed-at: "11";
251
258
  text-stroke: -webkit;
252
259
  transforms2d: -webkit;
260
+ transforms2d-unprefixed-at: "23";
253
261
  transforms3d: -webkit;
262
+ transforms3d-unprefixed-at: "23";
254
263
  user-select-none: -webkit; }
255
264
 
256
265
  .opera-mini {
@@ -258,10 +267,11 @@
258
267
  text-overflow: -o; }
259
268
 
260
269
  .opera-mobile {
261
- versions: "10", "11.5", "12", "12.1", "0";
270
+ versions: "10", "11.5", "12", "12.1", "22";
262
271
  border-image: -o;
263
- border-image-unprefixed-at: "0";
272
+ border-image-unprefixed-at: "22";
264
273
  css-animation: prefix-no-longer-needed;
274
+ css-appearance: prefix-no-longer-needed;
265
275
  css-canvas: prefix-no-longer-needed;
266
276
  css-filters: prefix-no-longer-needed;
267
277
  css-gradients: prefix-no-longer-needed;
@@ -271,15 +281,15 @@
271
281
  css-reflections: prefix-no-longer-needed;
272
282
  css-repeating-gradients: prefix-no-longer-needed;
273
283
  css-repeating-gradients-unprefixed-at: "12.1";
274
- css-transitions: prefix-no-longer-needed;
284
+ css-transitions: -o;
275
285
  css-transitions-unprefixed-at: "12.1";
276
286
  css3-tabsize: -o;
277
- css3-tabsize-unprefixed-at: "0";
287
+ css3-tabsize-unprefixed-at: "22";
278
288
  font-feature: prefix-no-longer-needed;
279
289
  intrinsic-width: prefix-no-longer-needed;
280
290
  multicolumn: prefix-no-longer-needed;
281
291
  object-fit: -o;
282
- object-fit-unprefixed-at: "0";
292
+ object-fit-unprefixed-at: "22";
283
293
  text-overflow: -o;
284
294
  text-overflow-unprefixed-at: "12.1";
285
295
  text-stroke: prefix-no-longer-needed;
@@ -296,6 +306,7 @@
296
306
  calc: -webkit;
297
307
  calc-unprefixed-at: "6.1";
298
308
  css-animation: -webkit;
309
+ css-appearance: -webkit;
299
310
  css-boxshadow: -webkit;
300
311
  css-boxshadow-unprefixed-at: "5.1";
301
312
  css-canvas: -webkit;