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

Sign up to get free protection for your applications and to get access to all the features.
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;