chriseppstein-compass 0.6.15 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/CHANGELOG.markdown +170 -0
  2. data/LICENSE.markdown +29 -0
  3. data/README.markdown +10 -2
  4. data/REVISION +1 -1
  5. data/Rakefile +126 -0
  6. data/VERSION.yml +2 -2
  7. data/deps.rip +1 -0
  8. data/examples/blueprint_default/src/images/grid.png +0 -0
  9. data/examples/blueprint_plugins/src/images/grid.png +0 -0
  10. data/examples/blueprint_scoped/images/grid.png +0 -0
  11. data/examples/blueprint_scoped_form/images/grid.png +0 -0
  12. data/examples/blueprint_semantic/src/images/grid.png +0 -0
  13. data/examples/blueprint_semantic/src/liquid.sass +2 -2
  14. data/examples/blueprint_semantic/src/screen.sass +3 -3
  15. data/examples/compass/src/images/blue_arrow.gif +0 -0
  16. data/frameworks/blueprint/stylesheets/blueprint/_ie.sass +42 -0
  17. data/frameworks/blueprint/stylesheets/blueprint/_reset.sass +3 -0
  18. data/frameworks/blueprint/stylesheets/blueprint/modules/_fancy_type.sass +10 -9
  19. data/frameworks/blueprint/stylesheets/blueprint/modules/_form.sass +35 -23
  20. data/frameworks/blueprint/stylesheets/blueprint/modules/_grid.sass +7 -7
  21. data/frameworks/blueprint/stylesheets/blueprint/modules/_reset.sass +56 -0
  22. data/frameworks/blueprint/stylesheets/blueprint/modules/_rtl.sass +2 -2
  23. data/frameworks/blueprint/stylesheets/blueprint/modules/_scaffolding.sass +2 -1
  24. data/frameworks/blueprint/stylesheets/blueprint/modules/_typography.sass +3 -2
  25. data/frameworks/blueprint/templates/project/manifest.rb +2 -1
  26. data/frameworks/blueprint/templates/project/partials/_base.sass +11 -0
  27. data/frameworks/blueprint/templates/project/screen.sass +38 -6
  28. data/frameworks/compass/stylesheets/compass/_utilities.sass +1 -0
  29. data/frameworks/compass/stylesheets/compass/utilities/_sprites.sass +1 -0
  30. data/frameworks/compass/stylesheets/compass/utilities/general/_reset.sass +106 -28
  31. data/frameworks/compass/stylesheets/compass/utilities/general/_tag_cloud.sass +1 -1
  32. data/frameworks/compass/stylesheets/compass/utilities/sprites/_sprite_img.sass +12 -0
  33. data/frameworks/compass/stylesheets/compass/utilities/text/_replacement.sass +10 -3
  34. data/frameworks/compass/templates/project/manifest.rb +1 -1
  35. data/frameworks/compass/templates/project/screen.sass +6 -0
  36. data/lib/compass/actions.rb +7 -0
  37. data/lib/compass/{merb.rb → app_integration/merb.rb} +0 -0
  38. data/lib/compass/app_integration/rails/action_controller.rb +15 -0
  39. data/lib/compass/app_integration/rails/image_url.rb +14 -0
  40. data/lib/compass/app_integration/rails/sass_plugin.rb +5 -0
  41. data/lib/compass/app_integration/rails/templates/compass-install-rails.rb +80 -0
  42. data/lib/compass/app_integration/rails.rb +12 -0
  43. data/lib/compass/app_integration.rb +5 -0
  44. data/lib/compass/commands/project_base.rb +12 -2
  45. data/lib/compass/commands/update_project.rb +13 -3
  46. data/lib/compass/commands/watch_project.rb +27 -28
  47. data/lib/compass/commands/write_configuration.rb +5 -1
  48. data/lib/compass/compiler.rb +14 -2
  49. data/lib/compass/configuration.rb +78 -2
  50. data/lib/compass/exec.rb +78 -37
  51. data/lib/compass/installers/base.rb +4 -2
  52. data/lib/compass/installers/rails.rb +3 -2
  53. data/lib/compass/installers/stand_alone.rb +3 -2
  54. data/lib/compass/sass_extensions/functions/display.rb +22 -0
  55. data/lib/compass/sass_extensions/functions/enumerate.rb +6 -0
  56. data/lib/compass/sass_extensions/functions/image_url.rb +88 -0
  57. data/lib/compass/sass_extensions/functions/inline_image.rb +35 -0
  58. data/lib/compass/sass_extensions/functions/selectors.rb +39 -0
  59. data/lib/compass/sass_extensions/functions.rb +19 -0
  60. data/lib/compass/sass_extensions/monkey_patches/stylesheet_updating.rb +23 -0
  61. data/lib/compass/sass_extensions/monkey_patches.rb +3 -0
  62. data/lib/compass/sass_extensions.rb +5 -0
  63. data/lib/compass/version.rb +2 -3
  64. data/lib/compass.rb +3 -18
  65. data/test/command_line_helper.rb +102 -0
  66. data/test/command_line_test.rb +2 -106
  67. data/test/compass_test.rb +18 -6
  68. data/test/configuration_test.rb +73 -0
  69. data/test/fixtures/stylesheets/blueprint/images/grid.png +0 -0
  70. data/test/fixtures/stylesheets/compass/css/reset.css +42 -46
  71. data/test/fixtures/stylesheets/compass/sass/reset.sass +9 -0
  72. data/test/fixtures/stylesheets/image_urls/config.rb +17 -0
  73. data/test/fixtures/stylesheets/image_urls/css/screen.css +3 -0
  74. data/test/fixtures/stylesheets/image_urls/images/grid.png +0 -0
  75. data/test/fixtures/stylesheets/image_urls/sass/screen.sass +6 -0
  76. data/test/rails_integration_test.rb +83 -0
  77. data/test/sass_extensions_test.rb +0 -1
  78. data/test/test_case_helper.rb +13 -0
  79. data/test/test_helper.rb +3 -27
  80. data/test/test_rails_helper.rb +20 -0
  81. metadata +51 -4
  82. data/lib/sass_extensions.rb +0 -67
@@ -0,0 +1,39 @@
1
+ module Compass::SassExtensions::Functions::Selectors
2
+ COMMA_SEPARATOR = /\s*,\s*/
3
+
4
+ # Permute multiple selectors each of which may be comma delimited, the end result is
5
+ # a new selector that is the equivalent of nesting each under the previous selector.
6
+ # To illustrate, the following mixins are equivalent:
7
+ # =mixin-a(!selector1, !selector2, !selector3)
8
+ # #{!selector1}
9
+ # #{selector2}
10
+ # #{selector3}
11
+ # width: 2px
12
+ # =mixin-b(!selector1, !selector2)
13
+ # #{nest(!selector, !selector2, !selector3)}
14
+ # width: 2px
15
+ def nest(*arguments)
16
+ nested = arguments.map{|a| a.value}.inject do |memo,arg|
17
+ ancestors = memo.split(COMMA_SEPARATOR)
18
+ descendants = arg.split(COMMA_SEPARATOR)
19
+ ancestors.map{|a| descendants.map{|d| "#{a} #{d}"}.join(", ")}.join(", ")
20
+ end
21
+ Sass::Script::String.new(nested)
22
+ end
23
+
24
+ # Permute two selectors, the first may be comma delimited.
25
+ # The end result is a new selector that is the equivalent of nesting the second
26
+ # selector under the first one in a sass file and preceding it with an &.
27
+ # To illustrate, the following mixins are equivalent:
28
+ # =mixin-a(!selector, !to_append)
29
+ # #{!selector}
30
+ # &#{!to_append}
31
+ # width: 2px
32
+ # =mixin-b(!selector, !to_append)
33
+ # #{append_selector(!selector, !to_append)}
34
+ # width: 2px
35
+ def append_selector(selector, to_append)
36
+ Sass::Script::String.new(selector.value.split(COMMA_SEPARATOR).map{|s| "#{s}#{to_append}"}.join(", "))
37
+ end
38
+
39
+ end
@@ -0,0 +1,19 @@
1
+ module Compass::SassExtensions::Functions
2
+ end
3
+
4
+ ['selectors', 'enumerate', 'image_url', 'display', 'inline_image'].each do |func|
5
+ require File.join(File.dirname(__FILE__), 'functions', func)
6
+ end
7
+
8
+ module Sass::Script::Functions
9
+ include Compass::SassExtensions::Functions::Selectors
10
+ include Compass::SassExtensions::Functions::Enumerate
11
+ include Compass::SassExtensions::Functions::ImageUrl
12
+ include Compass::SassExtensions::Functions::Display
13
+ include Compass::SassExtensions::Functions::InlineImage
14
+ end
15
+
16
+ # Wierd that this has to be re-included to pick up sub-modules. Ruby bug?
17
+ class Sass::Script::Functions::EvaluationContext
18
+ include Sass::Script::Functions
19
+ end
@@ -0,0 +1,23 @@
1
+ require 'sass/plugin'
2
+
3
+ # XXX: We can remove this monkeypatch once Sass 2.2 is released.
4
+ module Sass::Plugin
5
+ class << self
6
+ unless method_defined?(:exact_stylesheet_needs_update?)
7
+ def stylesheet_needs_update?(name, template_path, css_path)
8
+ css_file = css_filename(name, css_path)
9
+ template_file = template_filename(name, template_path)
10
+ exact_stylesheet_needs_update?(css_file, template_file)
11
+ end
12
+ def exact_stylesheet_needs_update?(css_file, template_file)
13
+ if !File.exists?(css_file)
14
+ return true
15
+ else
16
+ css_mtime = File.mtime(css_file)
17
+ File.mtime(template_file) > css_mtime ||
18
+ dependencies(template_file).any?(&dependency_updated?(css_mtime))
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ ['stylesheet_updating'].each do |patch|
2
+ require File.join(File.dirname(__FILE__), 'monkey_patches', patch)
3
+ end
@@ -0,0 +1,5 @@
1
+ module Compass::SassExtensions
2
+ end
3
+
4
+ require File.join(File.dirname(__FILE__), 'sass_extensions', 'functions')
5
+ require File.join(File.dirname(__FILE__), 'sass_extensions', 'monkey_patches')
@@ -3,8 +3,7 @@ module Compass
3
3
  # Returns a hash representing the version.
4
4
  # The :major, :minor, and :teeny keys have their respective numbers.
5
5
  # The :string key contains a human-readable string representation of the version.
6
- # If checked out from Git,
7
- # the :rev key will have the revision hash.
6
+ # The :rev key will have the current revision hash.
8
7
  #
9
8
  # This method swiped from Haml and then modified, some credit goes to Nathan Weizenbaum
10
9
  attr_writer :version
@@ -41,7 +40,7 @@ module Compass
41
40
  def revision_from_file
42
41
  if File.exists?(scope('REVISION'))
43
42
  rev = File.read(scope('REVISION')).strip
44
- rev = nil if rev !~ /[a-f0-9]+/
43
+ rev if rev =~ /[a-f0-9]+/
45
44
  end
46
45
  end
47
46
 
data/lib/compass.rb CHANGED
@@ -1,21 +1,7 @@
1
- require File.join(File.dirname(__FILE__), 'compass', 'dependencies')
2
-
3
- def assert_sass_version(obj)
4
- unless obj.respond_to?(:version) && obj.version[:major] == 2 && obj.version[:minor] >= 1
5
- raise LoadError.new("Compass requires Haml version 2.1 or greater.")
6
- end
7
- end
8
-
9
- begin
10
- assert_sass_version(Sass)
11
- rescue LoadError
12
- require 'haml'
13
- assert_sass_version(Haml)
1
+ module Compass
14
2
  end
15
3
 
16
- require File.join(File.dirname(__FILE__), 'sass_extensions')
17
-
18
- ['core_ext', 'version'].each do |file|
4
+ ['dependencies', 'sass_extensions', 'core_ext', 'version', 'errors'].each do |file|
19
5
  require File.join(File.dirname(__FILE__), 'compass', file)
20
6
  end
21
7
 
@@ -32,7 +18,6 @@ end
32
18
 
33
19
  require File.join(File.dirname(__FILE__), 'compass', 'configuration')
34
20
  require File.join(File.dirname(__FILE__), 'compass', 'frameworks')
21
+ require File.join(File.dirname(__FILE__), 'compass', 'app_integration')
35
22
 
36
- # make sure we're running inside Merb
37
- require File.join(File.dirname(__FILE__), 'compass', 'merb') if defined?(Merb::Plugins)
38
23
 
@@ -0,0 +1,102 @@
1
+ module Compass::CommandLineHelper
2
+ def compass(*arguments)
3
+ options = arguments.last.is_a?(Hash) ? arguments.pop : {}
4
+ options[:wait] = 0.25
5
+ if block_given?
6
+ responder = Responder.new
7
+ yield responder
8
+ IO.popen("-", "w+") do |io|
9
+ if io
10
+ #parent process
11
+ output = ""
12
+ eof_at = nil
13
+ while !eof_at || (Time.now - eof_at < options[:wait])
14
+ if io.eof?
15
+ eof_at ||= Time.now
16
+ sleep 0.1
17
+ else
18
+ eof_at = nil
19
+ timeout(1) do
20
+ output << io.readpartial(1024)
21
+ end
22
+ prompt = output.split("\n").last
23
+ if response = responder.response_for(prompt)
24
+ io.puts response
25
+ end
26
+ end
27
+ end
28
+ responder.assert_required_responses!
29
+ @last_result = output
30
+ else
31
+ #child process
32
+ execute *arguments
33
+ end
34
+ end
35
+ else
36
+ @last_result = capture_output do
37
+ execute *arguments
38
+ end
39
+ end
40
+ rescue Timeout::Error
41
+ fail "Read from child process timed out"
42
+ end
43
+
44
+ class Responder
45
+ Response = Struct.new(:prompt, :text, :required, :responded)
46
+ def initialize
47
+ @responses = []
48
+ end
49
+ def respond_to(prompt, options = {})
50
+ @responses << Response.new(prompt, options[:with], options[:required])
51
+ end
52
+ def response_for(prompt)
53
+ response = @responses.detect{|r| r.prompt == prompt}
54
+ if response
55
+ response.responded = true
56
+ response.text
57
+ end
58
+ end
59
+ def assert_required_responses!
60
+ @responses.each do |response|
61
+ if response.required && !response.responded
62
+ raise "Prompt not encountered: \"#{response.prompt}\""
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ def assert_action_performed(action, path)
69
+ actions_found = []
70
+ @last_result.split("\n").each do |line|
71
+ line = line.split
72
+ return if line.first == action.to_s && line.last == path
73
+ actions_found << line.first if line.last == path
74
+ end
75
+ message = "Action #{action.inspect} was not performed on: #{path}."
76
+ message += "The following actions were performed: #{actions_found.join(", ")}" if actions_found.any?
77
+ puts @last_result
78
+ fail message
79
+ end
80
+
81
+ def within_tmp_directory(dir = "tmp")
82
+ d = absolutize(dir)
83
+ FileUtils.mkdir_p(d)
84
+ Dir.chdir(d) do
85
+ yield
86
+ end
87
+ ensure
88
+ FileUtils.rm_rf(d)
89
+ end
90
+
91
+ def capture_output
92
+ real_stdout, $stdout = $stdout, StringIO.new
93
+ yield
94
+ $stdout.string
95
+ ensure
96
+ $stdout = real_stdout
97
+ end
98
+
99
+ def execute(*arguments)
100
+ Compass::Exec::Compass.new(arguments).run!
101
+ end
102
+ end
@@ -6,6 +6,7 @@ require 'timeout'
6
6
 
7
7
  class CommandLineTest < Test::Unit::TestCase
8
8
  include Compass::TestCaseHelper
9
+ include Compass::CommandLineHelper
9
10
 
10
11
  def teardown
11
12
  Compass.configuration.reset!
@@ -18,11 +19,7 @@ class CommandLineTest < Test::Unit::TestCase
18
19
 
19
20
  def test_list_frameworks
20
21
  compass "--list-frameworks"
21
- assert_equal(<<-FRAMEWORKS, @last_result)
22
- blueprint
23
- compass
24
- yui
25
- FRAMEWORKS
22
+ assert_equal("blueprint\ncompass\nyui\n", @last_result)
26
23
  end
27
24
 
28
25
  def test_basic_install
@@ -66,105 +63,4 @@ FRAMEWORKS
66
63
  end
67
64
  end
68
65
 
69
- def test_rails_install
70
- within_tmp_directory do
71
- generate_rails_app("compass_rails")
72
- Dir.chdir "compass_rails" do
73
- compass("--rails", ".") do |responder|
74
- responder.respond_to "Is this OK? (Y/n) ", :with => "Y"
75
- responder.respond_to "Emit compiled stylesheets to public/stylesheets/compiled/? (Y/n) ", :with => "Y"
76
- end
77
- # puts @last_result
78
- assert_action_performed :create, "./app/stylesheets/screen.sass"
79
- assert_action_performed :create, "./config/initializers/compass.rb"
80
- end
81
- end
82
- rescue LoadError
83
- puts "Skipping rails test. Couldn't Load rails"
84
- end
85
-
86
- protected
87
- def compass(*arguments)
88
- if block_given?
89
- responder = Responder.new
90
- yield responder
91
- IO.popen("-", "w+") do |io|
92
- if io
93
- #parent process
94
- output = ""
95
- while !io.eof?
96
- timeout(1) do
97
- output << io.readpartial(512)
98
- end
99
- prompt = output.split("\n").last
100
- if response = responder.response_for(prompt)
101
- io.puts response
102
- end
103
- end
104
- @last_result = output
105
- else
106
- #child process
107
- execute *arguments
108
- end
109
- end
110
- else
111
- @last_result = capture_output do
112
- execute *arguments
113
- end
114
- end
115
- rescue Timeout::Error
116
- fail "Read from child process timed out"
117
- end
118
-
119
- class Responder
120
- def initialize
121
- @responses = []
122
- end
123
- def respond_to(prompt, options = {})
124
- @responses << [prompt, options[:with]]
125
- end
126
- def response_for(prompt)
127
- pair = @responses.detect{|r| r.first == prompt}
128
- pair.last if pair
129
- end
130
- end
131
-
132
- def assert_action_performed(action, path)
133
- actions_found = []
134
- @last_result.split("\n").each do |line|
135
- line = line.split
136
- return if line.first == action.to_s && line.last == path
137
- actions_found << line.first if line.last == path
138
- end
139
- message = "Action #{action.inspect} was not performed on: #{path}."
140
- message += "The following actions were performed: #{actions_found.join(", ")}" if actions_found.any?
141
- puts @last_result
142
- fail message
143
- end
144
-
145
- def within_tmp_directory(dir = "tmp")
146
- d = absolutize(dir)
147
- FileUtils.mkdir_p(d)
148
- Dir.chdir(d) do
149
- yield
150
- end
151
- ensure
152
- FileUtils.rm_r(d)
153
- end
154
-
155
- def capture_output
156
- real_stdout, $stdout = $stdout, StringIO.new
157
- yield
158
- $stdout.string
159
- ensure
160
- $stdout = real_stdout
161
- end
162
-
163
- def execute(*arguments)
164
- Compass::Exec::Compass.new(arguments).run!
165
- end
166
-
167
- def generate_rails_app(name)
168
- `rails #{name}`
169
- end
170
66
  end
data/test/compass_test.rb CHANGED
@@ -9,7 +9,7 @@ class CompassTest < Test::Unit::TestCase
9
9
  end
10
10
 
11
11
  def teardown
12
- teardown_fixtures :blueprint, :yui, :empty, :compass
12
+ teardown_fixtures :blueprint, :yui, :empty, :compass, :image_urls
13
13
  end
14
14
 
15
15
  def teardown_fixtures(*project_names)
@@ -18,9 +18,10 @@ class CompassTest < Test::Unit::TestCase
18
18
  end
19
19
  end
20
20
 
21
- def test_blueprint_generates_no_files
21
+ def test_empty_project
22
+ # With no sass files, we should have no css files.
22
23
  within_project(:empty) do |proj|
23
- return unless File.exists?(proj.css_path)
24
+ return unless proj.css_path && File.exists?(proj.css_path)
24
25
  Dir.new(proj.css_path).each do |f|
25
26
  fail "This file should not have been generated: #{f}" unless f == "." || f == ".."
26
27
  end
@@ -54,6 +55,15 @@ class CompassTest < Test::Unit::TestCase
54
55
  end
55
56
  end
56
57
 
58
+ def test_image_urls
59
+ within_project('image_urls') do |proj|
60
+ each_css_file(proj.css_path) do |css_file|
61
+ assert_no_errors css_file, 'image_urls'
62
+ end
63
+ assert_renders_correctly :screen
64
+ end
65
+ end
66
+
57
67
  private
58
68
  def assert_no_errors(css_file, project_name)
59
69
  file = css_file[(tempfile_path(project_name).size+1)..-1]
@@ -80,11 +90,13 @@ private
80
90
 
81
91
  def within_project(project_name)
82
92
  @current_project = project_name
83
- Compass.configuration.parse(configuration_file(project_name))
93
+ Compass.configuration.parse(configuration_file(project_name)) if File.exists?(configuration_file(project_name))
84
94
  Compass.configuration.project_path = project_path(project_name)
85
95
  args = Compass.configuration.to_compiler_arguments(:logger => Compass::NullLogger.new)
86
- compiler = Compass::Compiler.new *args
87
- compiler.run
96
+ if Compass.configuration.sass_path && File.exists?(Compass.configuration.sass_path)
97
+ compiler = Compass::Compiler.new *args
98
+ compiler.run
99
+ end
88
100
  yield Compass.configuration
89
101
  rescue
90
102
  save_output(project_name)
@@ -35,4 +35,77 @@ class ConfigurationTest < Test::Unit::TestCase
35
35
  assert_equal expected_lines, actual_lines
36
36
  end
37
37
 
38
+ def test_serialization_fails_with_asset_host_set
39
+ contents = <<-CONFIG
40
+ asset_host do |path|
41
+ "http://example.com"
42
+ end
43
+ CONFIG
44
+
45
+ Compass.configuration.parse_string(contents, "test_serialization_fails_with_asset_host_set")
46
+
47
+ assert_raise Compass::Error do
48
+ Compass.configuration.serialize
49
+ end
50
+ end
51
+
52
+ def test_serialization_fails_with_asset_cache_buster_set
53
+ contents = <<-CONFIG
54
+ asset_cache_buster do |path|
55
+ "http://example.com"
56
+ end
57
+ CONFIG
58
+
59
+ Compass.configuration.parse_string(contents, "test_serialization_fails_with_asset_cache_buster_set")
60
+
61
+ assert_raise Compass::Error do
62
+ Compass.configuration.serialize
63
+ end
64
+ end
65
+
66
+ def test_additional_import_paths
67
+ contents = <<-CONFIG
68
+ project_path = "/home/chris/my_compass_project"
69
+ css_dir = "css"
70
+ additional_import_paths = ["../foo"]
71
+ add_import_path "/path/to/my/framework"
72
+ CONFIG
73
+
74
+ Compass.configuration.parse_string(contents, "test_additional_import_paths")
75
+
76
+ assert Compass.configuration.to_sass_engine_options[:load_paths].include?("/home/chris/my_compass_project/../foo")
77
+ assert Compass.configuration.to_sass_engine_options[:load_paths].include?("/path/to/my/framework"), Compass.configuration.to_sass_engine_options[:load_paths].inspect
78
+ assert_equal "/home/chris/my_compass_project/css/framework", Compass.configuration.to_sass_plugin_options[:template_location]["/path/to/my/framework"]
79
+ assert_equal "/home/chris/my_compass_project/css/foo", Compass.configuration.to_sass_plugin_options[:template_location]["/home/chris/my_compass_project/../foo"]
80
+
81
+ expected_serialization = <<EXPECTED
82
+ # Require any additional compass plugins here.
83
+ project_path = "/home/chris/my_compass_project"
84
+ css_dir = "css"
85
+ # To enable relative image paths using the images_url() function:
86
+ # http_images_path = :relative
87
+ additional_import_paths = ["../foo", "/path/to/my/framework"]
88
+ EXPECTED
89
+ assert_equal expected_serialization, Compass.configuration.serialize
90
+ end
91
+
92
+ def test_sass_options
93
+ contents = <<-CONFIG
94
+ sass_options = {:foo => 'bar'}
95
+ CONFIG
96
+
97
+ Compass.configuration.parse_string(contents, "test_sass_options")
98
+
99
+ assert_equal 'bar', Compass.configuration.to_sass_engine_options[:foo]
100
+ assert_equal 'bar', Compass.configuration.to_sass_plugin_options[:foo]
101
+
102
+ expected_serialization = <<EXPECTED
103
+ # Require any additional compass plugins here.
104
+ # To enable relative image paths using the images_url() function:
105
+ # http_images_path = :relative
106
+ sass_options = {:foo=>"bar"}
107
+ EXPECTED
108
+ assert_equal expected_serialization, Compass.configuration.serialize
109
+ end
110
+
38
111
  end
@@ -1,64 +1,60 @@
1
- html, body {
1
+ html, body, div, span, applet, object, iframe,
2
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
3
+ a, abbr, acronym, address, big, cite, code,
4
+ del, dfn, em, font, img, ins, kbd, q, s, samp,
5
+ small, strike, strong, sub, sup, tt, var,
6
+ dl, dt, dd, ol, ul, li,
7
+ fieldset, form, label, legend,
8
+ table, caption, tbody, tfoot, thead, tr, th, td {
2
9
  margin: 0;
3
10
  padding: 0;
4
11
  border: 0;
12
+ outline: 0;
5
13
  font-weight: inherit;
6
14
  font-style: inherit;
7
15
  font-size: 100%;
8
16
  font-family: inherit;
9
17
  vertical-align: baseline; }
10
18
 
11
- div, span, object, iframe, h1, h2, h3, h4, h5, h6, p,
12
- pre, a, abbr, acronym, address, code, del, dfn, em, img,
13
- dl, dt, dd, ol, ul, li, fieldset, form, label, legend, caption, tbody, tfoot, thead, tr {
14
- margin: 0;
15
- padding: 0;
16
- border: 0;
17
- font-weight: inherit;
18
- font-style: inherit;
19
- font-size: 100%;
20
- font-family: inherit;
21
- vertical-align: baseline; }
19
+ *:focus {
20
+ outline: 0; }
22
21
 
23
- blockquote, q {
24
- margin: 0;
25
- padding: 0;
26
- border: 0;
27
- font-weight: inherit;
28
- font-style: inherit;
29
- font-size: 100%;
30
- font-family: inherit;
31
- vertical-align: baseline;
32
- quotes: "" ""; }
33
- blockquote:before, q:before,
34
- blockquote:after, q:after {
35
- content: ""; }
22
+ body {
23
+ line-height: 1em;
24
+ color: black;
25
+ background: #fff; }
36
26
 
37
- th, td, caption {
38
- margin: 0;
39
- padding: 0;
40
- border: 0;
41
- font-weight: inherit;
42
- font-style: inherit;
43
- font-size: 100%;
44
- font-family: inherit;
45
- vertical-align: baseline;
46
- text-align: left;
47
- font-weight: normal;
48
- vertical-align: middle; }
27
+ ol, ul {
28
+ list-style: none; }
49
29
 
30
+ /* tables still need 'cellspacing="0"' in the markup */
50
31
  table {
51
- margin: 0;
52
- padding: 0;
53
- border: 0;
54
- font-weight: inherit;
55
- font-style: inherit;
56
- font-size: 100%;
57
- font-family: inherit;
58
- vertical-align: baseline;
59
32
  border-collapse: separate;
60
33
  border-spacing: 0;
61
34
  vertical-align: middle; }
62
35
 
63
- a img {
36
+ caption, th, td {
37
+ text-align: left;
38
+ font-weight: normal;
39
+ vertical-align: middle; }
40
+
41
+ q, blockquote {
42
+ quotes: "" ""; }
43
+ q:before, q:after, blockquote:before, blockquote:after {
44
+ content: ""; }
45
+
46
+ img a {
64
47
  border: none; }
48
+
49
+ .unregistered-only, .registered-only {
50
+ display: none; }
51
+
52
+ body.registered a.registered-only, body.registered abbr.registered-only, body.registered acronym.registered-only, body.registered b.registered-only, body.registered basefont.registered-only, body.registered bdo.registered-only, body.registered big.registered-only, body.registered br.registered-only, body.registered cite.registered-only, body.registered code.registered-only, body.registered dfn.registered-only, body.registered em.registered-only, body.registered font.registered-only, body.registered i.registered-only, body.registered img.registered-only, body.registered input.registered-only, body.registered kbd.registered-only, body.registered label.registered-only, body.registered q.registered-only, body.registered s.registered-only, body.registered samp.registered-only, body.registered select.registered-only, body.registered small.registered-only, body.registered span.registered-only, body.registered strike.registered-only, body.registered strong.registered-only, body.registered sub.registered-only, body.registered sup.registered-only, body.registered textarea.registered-only, body.registered tt.registered-only, body.registered u.registered-only, body.registered var.registered-only {
53
+ display: inline; }
54
+ body.registered address.registered-only, body.registered blockquote.registered-only, body.registered center.registered-only, body.registered dir.registered-only, body.registered div.registered-only, body.registered dd.registered-only, body.registered dl.registered-only, body.registered dt.registered-only, body.registered fieldset.registered-only, body.registered form.registered-only, body.registered frameset.registered-only, body.registered h1.registered-only, body.registered h2.registered-only, body.registered h3.registered-only, body.registered h4.registered-only, body.registered h5.registered-only, body.registered h6.registered-only, body.registered hr.registered-only, body.registered isindex.registered-only, body.registered menu.registered-only, body.registered noframes.registered-only, body.registered noscript.registered-only, body.registered ol.registered-only, body.registered p.registered-only, body.registered pre.registered-only, body.registered ul.registered-only {
55
+ display: block; }
56
+
57
+ body.unregistered a.unregistered-only, body.unregistered abbr.unregistered-only, body.unregistered acronym.unregistered-only, body.unregistered b.unregistered-only, body.unregistered basefont.unregistered-only, body.unregistered bdo.unregistered-only, body.unregistered big.unregistered-only, body.unregistered br.unregistered-only, body.unregistered cite.unregistered-only, body.unregistered code.unregistered-only, body.unregistered dfn.unregistered-only, body.unregistered em.unregistered-only, body.unregistered font.unregistered-only, body.unregistered i.unregistered-only, body.unregistered img.unregistered-only, body.unregistered input.unregistered-only, body.unregistered kbd.unregistered-only, body.unregistered label.unregistered-only, body.unregistered q.unregistered-only, body.unregistered s.unregistered-only, body.unregistered samp.unregistered-only, body.unregistered select.unregistered-only, body.unregistered small.unregistered-only, body.unregistered span.unregistered-only, body.unregistered strike.unregistered-only, body.unregistered strong.unregistered-only, body.unregistered sub.unregistered-only, body.unregistered sup.unregistered-only, body.unregistered textarea.unregistered-only, body.unregistered tt.unregistered-only, body.unregistered u.unregistered-only, body.unregistered var.unregistered-only {
58
+ display: inline; }
59
+ body.unregistered address.unregistered-only, body.unregistered blockquote.unregistered-only, body.unregistered center.unregistered-only, body.unregistered dir.unregistered-only, body.unregistered div.unregistered-only, body.unregistered dd.unregistered-only, body.unregistered dl.unregistered-only, body.unregistered dt.unregistered-only, body.unregistered fieldset.unregistered-only, body.unregistered form.unregistered-only, body.unregistered frameset.unregistered-only, body.unregistered h1.unregistered-only, body.unregistered h2.unregistered-only, body.unregistered h3.unregistered-only, body.unregistered h4.unregistered-only, body.unregistered h5.unregistered-only, body.unregistered h6.unregistered-only, body.unregistered hr.unregistered-only, body.unregistered isindex.unregistered-only, body.unregistered menu.unregistered-only, body.unregistered noframes.unregistered-only, body.unregistered noscript.unregistered-only, body.unregistered ol.unregistered-only, body.unregistered p.unregistered-only, body.unregistered pre.unregistered-only, body.unregistered ul.unregistered-only {
60
+ display: block; }
@@ -1 +1,10 @@
1
1
  @import compass/reset.sass
2
+
3
+ // Turn off the display for both of these classes
4
+ .unregistered-only, .registered-only
5
+ :display none
6
+ // Now turn only one of them back on depending on some other context.
7
+ body.registered
8
+ +reset-display(".registered-only")
9
+ body.unregistered
10
+ +reset-display(".unregistered-only")
@@ -0,0 +1,17 @@
1
+ # Require any additional compass plugins here.
2
+ project_type = :stand_alone
3
+ css_dir = "tmp"
4
+ sass_dir = "sass"
5
+ images_dir = "images"
6
+ output_style = :compact
7
+ # To enable relative image paths using the images_url() function:
8
+ # http_images_path = :relative
9
+ http_images_path = "/images"
10
+
11
+ asset_cache_buster do |path, file|
12
+ "busted=true"
13
+ end
14
+
15
+ asset_host do |path|
16
+ "http://assets%d.example.com" % (path.hash % 4)
17
+ end
@@ -0,0 +1,3 @@
1
+ .showgrid { background-image: url(http://assets2.example.com/images/grid.png?busted=true); }
2
+
3
+ .inlinegrid { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAUEAYAAACv1qP4AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAZ0lEQVRYw+3QwQ2AIBAFUTEUwI3+uzN7gDscsIgxEuO8An52J11X73OudfxMraXkzHfO3Y98nQEhA0IGhAwIGRAyIGRAyICQASEDQgaEDAgZEDIgZEDIgJABoZzSGK3tPuN9ERFP7Nw4fg+c5g8V1wAAAABJRU5ErkJggg=='); }
@@ -0,0 +1,6 @@
1
+ .showgrid
2
+ background-image= image_url("grid.png")
3
+
4
+ .inlinegrid
5
+ background-image= inline_image("grid.png")
6
+