compass 0.10.6 → 0.11.alpha.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +6 -6
- data/VERSION.yml +3 -3
- data/examples/blueprint_default/parts/forms.html.haml +8 -0
- data/examples/css3/src/main.scss +4 -0
- data/features/command_line.feature +20 -3
- data/features/step_definitions/command_line_steps.rb +7 -1
- data/frameworks/blueprint/stylesheets/_blueprint.scss +2 -12
- data/frameworks/blueprint/stylesheets/blueprint/_buttons.scss +34 -34
- data/frameworks/blueprint/stylesheets/blueprint/_colors.scss +32 -28
- data/frameworks/blueprint/stylesheets/blueprint/_debug.scss +3 -3
- data/frameworks/blueprint/stylesheets/blueprint/_fancy-type.scss +2 -2
- data/frameworks/blueprint/stylesheets/blueprint/_form.scss +14 -16
- data/frameworks/blueprint/stylesheets/blueprint/_grid.scss +39 -37
- data/frameworks/blueprint/stylesheets/blueprint/_ie.scss +17 -15
- data/frameworks/blueprint/stylesheets/blueprint/_interaction.scss +53 -44
- data/frameworks/blueprint/stylesheets/blueprint/_liquid.scss +26 -26
- data/frameworks/blueprint/stylesheets/blueprint/_print.scss +13 -20
- data/frameworks/blueprint/stylesheets/blueprint/_rtl.scss +32 -44
- data/frameworks/blueprint/stylesheets/blueprint/_scaffolding.scss +10 -12
- data/frameworks/blueprint/stylesheets/blueprint/_typography.scss +18 -32
- data/frameworks/blueprint/stylesheets/blueprint/reset/_utilities.scss +50 -25
- data/frameworks/compass/stylesheets/compass/_css3.scss +1 -15
- data/frameworks/compass/stylesheets/compass/_layout.scss +1 -0
- data/frameworks/compass/stylesheets/compass/_support.scss +4 -0
- data/frameworks/compass/stylesheets/compass/css3/_box-shadow-v2.scss +98 -0
- data/frameworks/compass/stylesheets/compass/css3/_box-shadow.scss +7 -40
- data/frameworks/compass/stylesheets/compass/css3/_box.scss +0 -1
- data/frameworks/compass/stylesheets/compass/css3/_columns.scss +23 -18
- data/frameworks/compass/stylesheets/compass/css3/_font-face.scss +2 -3
- data/frameworks/compass/stylesheets/compass/css3/_gradient.scss +66 -42
- data/frameworks/compass/stylesheets/compass/css3/_images.scss +52 -0
- data/frameworks/compass/stylesheets/compass/css3/_shared.scss +1 -1
- data/frameworks/compass/stylesheets/compass/css3/_text-shadow-v2.scss +72 -0
- data/frameworks/compass/stylesheets/compass/css3/_transform-v2.scss +584 -0
- data/frameworks/compass/stylesheets/compass/css3/_version-1.scss +16 -0
- data/frameworks/compass/stylesheets/compass/css3/_version-2.scss +16 -0
- data/frameworks/compass/stylesheets/compass/layout/_stretching.scss +24 -0
- data/frameworks/compass/stylesheets/compass/utilities/general/_hacks.scss +4 -4
- data/frameworks/compass/stylesheets/compass/utilities/lists/_horizontal-list.scss +5 -1
- data/frameworks/compass/stylesheets/compass/utilities/lists/_inline-list.scss +7 -1
- data/frameworks/compass/stylesheets/compass/utilities/tables/_borders.scss +7 -1
- data/lib/compass/actions.rb +1 -1
- data/lib/compass/app_integration/rails/actionpack3/railtie.rb +18 -0
- data/lib/compass/app_integration/rails/configuration_defaults.rb +22 -0
- data/lib/compass/app_integration/rails/installer.rb +77 -34
- data/lib/compass/app_integration/rails/runtime.rb +3 -0
- data/lib/compass/app_integration/stand_alone/configuration_defaults.rb +1 -1
- data/lib/compass/commands/print_version.rb +1 -1
- data/lib/compass/commands/update_project.rb +2 -2
- data/lib/compass/commands/write_configuration.rb +10 -1
- data/lib/compass/compiler.rb +1 -5
- data/lib/compass/configuration.rb +2 -1
- data/lib/compass/configuration/adapters.rb +2 -1
- data/lib/compass/configuration/comments.rb +34 -1
- data/lib/compass/configuration/helpers.rb +3 -7
- data/lib/compass/configuration/paths.rb +1 -1
- data/lib/compass/exec/project_options_parser.rb +4 -0
- data/lib/compass/installers/base.rb +1 -1
- data/lib/compass/logger.rb +4 -2
- data/lib/compass/sass_extensions/functions.rb +6 -3
- data/lib/compass/sass_extensions/functions/colors.rb +58 -0
- data/lib/compass/sass_extensions/functions/constants.rb +1 -1
- data/lib/compass/sass_extensions/functions/display.rb +4 -2
- data/lib/compass/sass_extensions/functions/gradient_support.rb +343 -25
- data/lib/compass/sass_extensions/functions/if.rb +9 -0
- data/lib/compass/sass_extensions/functions/inline_image.rb +9 -3
- data/lib/compass/sass_extensions/functions/trig.rb +27 -0
- data/lib/compass/version.rb +6 -1
- data/lib/rails/init.rb +2 -0
- data/test/command_line_test.rb +6 -9
- data/test/compass_test.rb +2 -0
- data/test/configuration_test.rb +20 -0
- data/test/fixtures/stylesheets/blueprint/css/ie.css +16 -0
- data/test/fixtures/stylesheets/blueprint/css/screen.css +37 -34
- data/test/fixtures/stylesheets/blueprint/css/single-imports/colors.css +5 -5
- data/test/fixtures/stylesheets/blueprint/css/single-imports/form.css +7 -5
- data/test/fixtures/stylesheets/blueprint/css/single-imports/grid.css +5 -5
- data/test/fixtures/stylesheets/blueprint/css/single-imports/ie.css +16 -0
- data/test/fixtures/stylesheets/blueprint/css/single-imports/interaction.css +12 -9
- data/test/fixtures/stylesheets/blueprint/css/single-imports/reset-utilities.css +23 -64
- data/test/fixtures/stylesheets/blueprint/css/single-imports/reset.css +13 -37
- data/test/fixtures/stylesheets/blueprint/css/single-imports/rtl.css +5 -5
- data/test/fixtures/stylesheets/blueprint/css/single-imports/scaffolding.css +4 -4
- data/test/fixtures/stylesheets/blueprint/css/single-imports/typography.css +12 -15
- data/test/fixtures/stylesheets/compass/config.rb +2 -0
- data/test/fixtures/stylesheets/compass/css/box.css +6 -13
- data/test/fixtures/stylesheets/compass/css/box_shadow.css +17 -0
- data/test/fixtures/stylesheets/compass/css/columns.css +47 -0
- data/test/fixtures/stylesheets/compass/css/gradients.css +240 -25
- data/test/fixtures/stylesheets/compass/css/lists.css +12 -4
- data/test/fixtures/stylesheets/compass/css/print.css +1 -1
- data/test/fixtures/stylesheets/compass/css/reset.css +2 -2
- data/test/fixtures/stylesheets/compass/css/stretching.css +66 -0
- data/test/fixtures/stylesheets/compass/css/transform.css +305 -0
- data/test/fixtures/stylesheets/compass/sass/box_shadow.scss +5 -0
- data/test/fixtures/stylesheets/compass/sass/columns.scss +10 -0
- data/test/fixtures/stylesheets/compass/sass/gradients.sass +151 -19
- data/test/fixtures/stylesheets/compass/sass/stretching.sass +34 -0
- data/test/fixtures/stylesheets/compass/sass/transform.scss +87 -0
- data/test/sass_extensions_test.rb +44 -0
- metadata +42 -96
- data/frameworks/_blueprint_deprecated_imports/stylesheets/_blueprint.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_buttons.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_colors.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_debug.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_fancy_type.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_form.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_grid.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_ie.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_interaction.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_link_icons.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_liquid.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_print.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_reset.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_rtl.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_scaffolding.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_screen.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_typography.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/_utilities.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_buttons.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_colors.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_debug.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_fancy_type.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_form.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_grid.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_interaction.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_link_icons.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_liquid.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_reset.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_rtl.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_scaffolding.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_typography.sass +0 -2
- data/frameworks/_blueprint_deprecated_imports/stylesheets/blueprint/modules/_utilities.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/_compass.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/_css3.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/_layout.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/_misc.sass +0 -1
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/_misc.scss +0 -22
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/_reset.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/_utilities.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_background_clip.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_background_origin.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_background_size.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_border_radius.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_box_shadow.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_box_sizing.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_columns.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_font_face.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_gradient.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_inline_block.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_opacity.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_text_shadow.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_transform.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/css3/_transition.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/layout/_sticky_footer.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/_general.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/_links.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/_lists.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/_print.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/_sprites.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/_tables.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/_text.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/general/_clearfix.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/general/_float.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/general/_hacks.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/general/_min.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/general/_reset.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/general/_tabs.sass +0 -0
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/general/_tag_cloud.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/links/_hover_link.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/links/_link_colors.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/links/_unstyled_link.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/lists/_bullets.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/lists/_horizontal_list.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/lists/_inline_list.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/sprites/_sprite_img.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/tables/_alternating_rows_and_columns.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/tables/_borders.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/tables/_scaffolding.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/text/_ellipsis.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/text/_nowrap.sass +0 -2
- data/frameworks/_compass_deprecated_imports/stylesheets/compass/utilities/text/_replacement.sass +0 -2
@@ -11,7 +11,7 @@ module Compass
|
|
11
11
|
locations = []
|
12
12
|
locations << [sass_path, css_path] if sass_path && css_path
|
13
13
|
Compass::Frameworks::ALL.each do |framework|
|
14
|
-
locations << [framework.stylesheets_directory, css_path || css_dir || "."]
|
14
|
+
locations << [framework.stylesheets_directory, File.join(css_path || css_dir || ".", framework.name)]
|
15
15
|
end
|
16
16
|
resolve_additional_import_paths.each do |additional_path|
|
17
17
|
locations << [additional_path, File.join(css_path || css_dir || ".", File.basename(additional_path))]
|
@@ -46,6 +46,7 @@ module Compass
|
|
46
46
|
engine_opts[:line_comments] = line_comments
|
47
47
|
engine_opts[:cache] = cache
|
48
48
|
engine_opts[:cache_location] = cache_path
|
49
|
+
engine_opts[:quiet] = disable_warnings if disable_warnings
|
49
50
|
engine_opts.merge!(sass_options || {})
|
50
51
|
end
|
51
52
|
|
@@ -8,7 +8,7 @@ module Compass
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def comment_for_relative_assets
|
11
|
-
unless relative_assets
|
11
|
+
unless top_level.relative_assets
|
12
12
|
%q{# To enable relative paths to assets via compass helper functions. Uncomment:
|
13
13
|
# relative_assets = true
|
14
14
|
}
|
@@ -17,6 +17,39 @@ module Compass
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
def comment_for_line_comments
|
21
|
+
if top_level.line_comments
|
22
|
+
%q{# To disable debugging comments that display the original location of your selectors. Uncomment:
|
23
|
+
# line_comments = false
|
24
|
+
}
|
25
|
+
else
|
26
|
+
""
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def comment_for_output_style
|
31
|
+
unless top_level.output_style_without_default
|
32
|
+
%Q{# You can select your preferred output style here (can be overridden via the command line):
|
33
|
+
# output_style = :expanded or :nested or :compact or :compressed
|
34
|
+
}
|
35
|
+
else
|
36
|
+
""
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def comment_for_preferred_syntax
|
41
|
+
if top_level.preferred_syntax == :scss && top_level.sass_dir
|
42
|
+
%Q{
|
43
|
+
# If you prefer the indented syntax, you might want to regenerate this
|
44
|
+
# project again passing --syntax sass, or you can uncomment this:
|
45
|
+
# preferred_syntax = :sass
|
46
|
+
# and then run:
|
47
|
+
# sass-convert -R --from scss --to sass #{top_level.sass_dir} scss && rm -rf sass && mv scss sass
|
48
|
+
}
|
49
|
+
else
|
50
|
+
""
|
51
|
+
end
|
52
|
+
end
|
20
53
|
end
|
21
54
|
end
|
22
55
|
end
|
@@ -54,21 +54,17 @@ module Compass
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def configure_sass_plugin!
|
57
|
-
return if sass_plugin_configured?
|
58
57
|
require 'sass/plugin'
|
59
|
-
@sass_plugin_configured = true
|
60
58
|
config = sass_plugin_configuration
|
61
59
|
locations = config.delete(:template_location)
|
62
60
|
Sass::Plugin.options.merge!(config)
|
63
61
|
locations.each do |sass_dir, css_dir|
|
64
|
-
Sass::Plugin.
|
62
|
+
unless Sass::Plugin.engine_options[:load_paths].include?(sass_dir)
|
63
|
+
Sass::Plugin.add_template_location sass_dir, css_dir
|
64
|
+
end
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
def sass_plugin_configured?
|
69
|
-
@sass_plugin_configured
|
70
|
-
end
|
71
|
-
|
72
68
|
def sass_engine_options
|
73
69
|
configuration.to_sass_engine_options
|
74
70
|
end
|
@@ -8,7 +8,7 @@ module Compass::Configuration::Paths
|
|
8
8
|
class_eval %Q{
|
9
9
|
def #{attr} # def css_dir
|
10
10
|
path = #{attr}_with_trailing_separator # path = css_dir_with_trailing_separator
|
11
|
-
if path =~ TRAILING_SEPARATOR
|
11
|
+
if path.to_s =~ TRAILING_SEPARATOR # if path =~ TRAILING_SEPARATOR
|
12
12
|
path = path[0..-($1.length+1)] # path = path[0..-($1.length+1)]
|
13
13
|
end # end
|
14
14
|
path # path
|
@@ -49,6 +49,10 @@ module Compass::Exec::ProjectOptionsParser
|
|
49
49
|
opts.on('--relative-assets', :NONE, 'Make compass asset helpers generate relative urls to assets.') do
|
50
50
|
self.options[:relative_assets] = true
|
51
51
|
end
|
52
|
+
|
53
|
+
opts.on('--no-line-comments', :NONE, 'Disable line comments.') do
|
54
|
+
self.options[:line_comments] = false
|
55
|
+
end
|
52
56
|
end
|
53
57
|
|
54
58
|
end
|
@@ -84,7 +84,7 @@ module Compass
|
|
84
84
|
to = targetize(install_location_for_stylesheet(to, options))
|
85
85
|
contents = File.new(from).read
|
86
86
|
if preferred_syntax.to_s != from[-4..-1]
|
87
|
-
logger.record :convert, basename(from)
|
87
|
+
# logger.record :convert, basename(from)
|
88
88
|
tree = Sass::Engine.new(contents, Compass.sass_engine_options.merge(:syntax => from[-4..-1].intern)).to_tree
|
89
89
|
contents = tree.send("to_#{preferred_syntax}")
|
90
90
|
to[-4..-1] = preferred_syntax.to_s
|
data/lib/compass/logger.rb
CHANGED
@@ -16,7 +16,8 @@ module Compass
|
|
16
16
|
:exists => :green,
|
17
17
|
:directory => :green,
|
18
18
|
:identical => :green,
|
19
|
-
:convert => :green
|
19
|
+
:convert => :green,
|
20
|
+
:unchanged => :yellow
|
20
21
|
}
|
21
22
|
|
22
23
|
|
@@ -32,8 +33,9 @@ module Compass
|
|
32
33
|
def record(action, *arguments)
|
33
34
|
msg = ""
|
34
35
|
msg << color(ACTION_COLORS[action]) if Compass.configuration.color_output
|
35
|
-
msg << "#{action_padding(action)}#{action}
|
36
|
+
msg << "#{action_padding(action)}#{action}"
|
36
37
|
msg << color(:clear) if Compass.configuration.color_output
|
38
|
+
msg << " #{arguments.join(' ')}"
|
37
39
|
log msg
|
38
40
|
end
|
39
41
|
|
@@ -2,9 +2,9 @@ module Compass::SassExtensions::Functions
|
|
2
2
|
end
|
3
3
|
|
4
4
|
%w(
|
5
|
-
selectors enumerate urls display
|
6
|
-
inline_image image_size gradient_support
|
7
|
-
font_files
|
5
|
+
selectors enumerate urls display if
|
6
|
+
inline_image image_size constants gradient_support
|
7
|
+
font_files lists colors trig
|
8
8
|
).each do |func|
|
9
9
|
require "compass/sass_extensions/functions/#{func}"
|
10
10
|
end
|
@@ -20,6 +20,9 @@ module Sass::Script::Functions
|
|
20
20
|
include Compass::SassExtensions::Functions::FontFiles
|
21
21
|
include Compass::SassExtensions::Functions::Constants
|
22
22
|
include Compass::SassExtensions::Functions::Lists
|
23
|
+
include Compass::SassExtensions::Functions::Colors
|
24
|
+
include Compass::SassExtensions::Functions::Trig
|
25
|
+
include Compass::SassExtensions::Functions::If
|
23
26
|
end
|
24
27
|
|
25
28
|
# Wierd that this has to be re-included to pick up sub-modules. Ruby bug?
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Compass::SassExtensions::Functions::Colors
|
2
|
+
if defined?(Sass::Util)
|
3
|
+
include Sass::Util
|
4
|
+
else
|
5
|
+
include Haml::Util
|
6
|
+
end
|
7
|
+
|
8
|
+
# a genericized version of lighten/darken so that negative values can be used.
|
9
|
+
def adjust_lightness(color, amount)
|
10
|
+
assert_type color, :Color
|
11
|
+
assert_type amount, :Number
|
12
|
+
color.with(:lightness => restrict(color.lightness + amount.value, 0..100))
|
13
|
+
end
|
14
|
+
|
15
|
+
# Scales a color's lightness by some percentage.
|
16
|
+
# If the amount is negative, the color is scaled darker, if positive, it is scaled lighter.
|
17
|
+
# This will never return a pure light or dark color unless the amount is 100%.
|
18
|
+
def scale_lightness(color, amount)
|
19
|
+
assert_type color, :Color
|
20
|
+
assert_type amount, :Number
|
21
|
+
color.with(:lightness => scale_color_value(color.lightness, amount.value))
|
22
|
+
end
|
23
|
+
|
24
|
+
# a genericized version of saturation/desaturate so that negative values can be used.
|
25
|
+
def adjust_saturation(color, amount)
|
26
|
+
assert_type color, :Color
|
27
|
+
assert_type amount, :Number
|
28
|
+
color.with(:saturation => restrict(color.saturation + amount.value, 0..100))
|
29
|
+
end
|
30
|
+
|
31
|
+
# Scales a color's saturation by some percentage.
|
32
|
+
# If the amount is negative, the color is desaturated, if positive, it is saturated.
|
33
|
+
# This will never return a pure saturated or desaturated color unless the amount is 100%.
|
34
|
+
def scale_saturation(color, amount)
|
35
|
+
assert_type color, :Color
|
36
|
+
assert_type amount, :Number
|
37
|
+
color.with(:saturation => scale_color_value(color.saturation, amount.value))
|
38
|
+
end
|
39
|
+
|
40
|
+
# returns an IE hex string for a color with an alpha channel
|
41
|
+
# suitable for passing to IE filters.
|
42
|
+
def ie_hex_str(color)
|
43
|
+
assert_type color, :Color
|
44
|
+
alpha = (color.alpha * 255).round
|
45
|
+
alphastr = alpha.to_s(16).rjust(2, '0')
|
46
|
+
Sass::Script::String.new("##{alphastr}#{color.send(:hex_str)[1..-1]}".upcase)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
def scale_color_value(value, amount)
|
51
|
+
if amount > 0
|
52
|
+
value += (100 - value) * (amount / 100.0)
|
53
|
+
elsif amount < 0
|
54
|
+
value += value * amount / 100.0
|
55
|
+
end
|
56
|
+
value
|
57
|
+
end
|
58
|
+
end
|
@@ -9,7 +9,7 @@ module Compass::SassExtensions::Functions::Constants
|
|
9
9
|
when "right" then "left"
|
10
10
|
when "center" then "center"
|
11
11
|
else
|
12
|
-
|
12
|
+
pos
|
13
13
|
end
|
14
14
|
end
|
15
15
|
Sass::Script::String.new(opposite.join(" "), position.type)
|
@@ -2,7 +2,8 @@ module Compass::SassExtensions::Functions::Display
|
|
2
2
|
DEFAULT_DISPLAY = {
|
3
3
|
:block => %w{address blockquote center dir div dd dl dt fieldset form
|
4
4
|
frameset h1 h2 h3 h4 h5 h6 hr isindex menu noframes
|
5
|
-
noscript ol p pre ul
|
5
|
+
noscript ol p pre ul
|
6
|
+
article aside dialog figure footer header hgroup nav section},
|
6
7
|
:inline => %w{a abbr acronym b basefont bdo big br cite code dfn em
|
7
8
|
font i img input kbd label q s samp select small span
|
8
9
|
strike strong sub sup textarea tt u var},
|
@@ -12,7 +13,8 @@ module Compass::SassExtensions::Functions::Display
|
|
12
13
|
:"table-header-group" => %w{thead},
|
13
14
|
:"table-footer-group" => %w{tfoot},
|
14
15
|
:"table-row" => %w{tr},
|
15
|
-
:"table-cell" => %w{th td}
|
16
|
+
:"table-cell" => %w{th td},
|
17
|
+
:html5 => %w{article aside dialog figure footer header hgroup nav section}
|
16
18
|
}
|
17
19
|
|
18
20
|
# returns a comma delimited string for all the
|
@@ -5,17 +5,32 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
5
5
|
def initialize(*values)
|
6
6
|
self.values = values
|
7
7
|
end
|
8
|
+
def join_with
|
9
|
+
", "
|
10
|
+
end
|
8
11
|
def inspect
|
9
|
-
|
12
|
+
to_s
|
10
13
|
end
|
11
14
|
def to_s
|
12
|
-
|
15
|
+
values.map {|v| v.to_s }.join(join_with)
|
16
|
+
end
|
17
|
+
def size
|
18
|
+
values.size
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class SpaceList < List
|
23
|
+
def join_with
|
24
|
+
" "
|
13
25
|
end
|
14
26
|
end
|
15
27
|
|
16
28
|
class ColorStop < Sass::Script::Literal
|
17
29
|
attr_accessor :color, :stop
|
18
30
|
def initialize(color, stop = nil)
|
31
|
+
unless Sass::Script::Color === color || Sass::Script::Funcall === color
|
32
|
+
raise Sass::SyntaxError, "Expected a color. Got: #{color}"
|
33
|
+
end
|
19
34
|
self.color, self.stop = color, stop
|
20
35
|
end
|
21
36
|
def inspect
|
@@ -35,9 +50,135 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
35
50
|
end
|
36
51
|
end
|
37
52
|
|
53
|
+
class RadialGradient < Sass::Script::Literal
|
54
|
+
attr_accessor :position_and_angle, :shape_and_size, :color_stops
|
55
|
+
def initialize(position_and_angle, shape_and_size, color_stops)
|
56
|
+
unless color_stops.values.size >= 2
|
57
|
+
raise Sass::SyntaxError, "At least two color stops are required for a radial-gradient"
|
58
|
+
end
|
59
|
+
self.position_and_angle = position_and_angle
|
60
|
+
self.shape_and_size = shape_and_size
|
61
|
+
self.color_stops = color_stops
|
62
|
+
end
|
63
|
+
def inspect
|
64
|
+
to_s
|
65
|
+
end
|
66
|
+
def to_s
|
67
|
+
s = "radial-gradient("
|
68
|
+
s << position_and_angle.to_s << ", " if position_and_angle
|
69
|
+
s << shape_and_size.to_s << ", " if shape_and_size
|
70
|
+
s << color_stops.to_s
|
71
|
+
s << ")"
|
72
|
+
end
|
73
|
+
def to_webkit
|
74
|
+
args = [
|
75
|
+
grad_point(position_and_angle || Sass::Script::String.new("center center")),
|
76
|
+
"0",
|
77
|
+
grad_point(position_and_angle || Sass::Script::String.new("center center")),
|
78
|
+
grad_end_position(color_stops, Sass::Script::Bool.new(true)),
|
79
|
+
grad_color_stops(color_stops)
|
80
|
+
]
|
81
|
+
Sass::Script::String.new("-webkit-gradient(radial, #{args.join(', ')})")
|
82
|
+
|
83
|
+
end
|
84
|
+
def to_moz
|
85
|
+
Sass::Script::String.new("-moz-#{to_s}")
|
86
|
+
end
|
87
|
+
def to_svg
|
88
|
+
# XXX Add shape support if possible
|
89
|
+
radial_svg_gradient(color_stops, position_and_angle || Sass::Script::String.new("center center"))
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
class LinearGradient < Sass::Script::Literal
|
94
|
+
attr_accessor :color_stops, :position_and_angle
|
95
|
+
def initialize(position_and_angle, color_stops)
|
96
|
+
unless color_stops.values.size >= 2
|
97
|
+
raise Sass::SyntaxError, "At least two color stops are required for a linear-gradient"
|
98
|
+
end
|
99
|
+
self.position_and_angle = position_and_angle
|
100
|
+
self.color_stops = color_stops
|
101
|
+
end
|
102
|
+
def inspect
|
103
|
+
to_s
|
104
|
+
end
|
105
|
+
def to_s
|
106
|
+
s = "linear-gradient("
|
107
|
+
s << position_and_angle.to_s << ", " if position_and_angle
|
108
|
+
s << color_stops.to_s
|
109
|
+
s << ")"
|
110
|
+
end
|
111
|
+
def to_webkit
|
112
|
+
args = []
|
113
|
+
args << grad_point(position_and_angle || Sass::Script::String.new("top"))
|
114
|
+
args << grad_point(opposite_position(position_and_angle || Sass::Script::String.new("top")))
|
115
|
+
args << grad_color_stops(color_stops)
|
116
|
+
Sass::Script::String.new("-webkit-gradient(linear, #{args.join(', ')})")
|
117
|
+
end
|
118
|
+
def to_moz
|
119
|
+
Sass::Script::String.new("-moz-#{to_s}")
|
120
|
+
end
|
121
|
+
def to_svg
|
122
|
+
linear_svg_gradient(color_stops, position_and_angle || Sass::Script::String.new("top"))
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
38
126
|
module Functions
|
127
|
+
|
128
|
+
def radial_gradient(position_and_angle, shape_and_size, *color_stops)
|
129
|
+
# Have to deal with variable length/meaning arguments.
|
130
|
+
if color_stop?(shape_and_size)
|
131
|
+
color_stops.unshift(shape_and_size)
|
132
|
+
shape_and_size = nil
|
133
|
+
elsif list_of_color_stops?(shape_and_size)
|
134
|
+
# Support legacy use of the color-stops() function
|
135
|
+
color_stops = shape_and_size.values + color_stops
|
136
|
+
shape_and_size = nil
|
137
|
+
end
|
138
|
+
shape_and_size = nil if shape_and_size && !shape_and_size.to_bool # nil out explictly passed falses
|
139
|
+
# ditto for position_and_angle
|
140
|
+
if color_stop?(position_and_angle)
|
141
|
+
color_stops.unshift(position_and_angle)
|
142
|
+
position_and_angle = nil
|
143
|
+
elsif list_of_color_stops?(position_and_angle)
|
144
|
+
color_stops = position_and_angle.values + color_stops
|
145
|
+
position_and_angle = nil
|
146
|
+
end
|
147
|
+
position_and_angle = nil if position_and_angle && !position_and_angle.to_bool
|
148
|
+
|
149
|
+
# Support legacy use of the color-stops() function
|
150
|
+
if color_stops.size == 1 && list_of_color_stops?(color_stops.first)
|
151
|
+
color_stops = color_stops.first.values
|
152
|
+
end
|
153
|
+
RadialGradient.new(position_and_angle, shape_and_size, send(:color_stops, *color_stops))
|
154
|
+
end
|
155
|
+
|
156
|
+
def linear_gradient(position_and_angle, *color_stops)
|
157
|
+
if color_stop?(position_and_angle)
|
158
|
+
color_stops.unshift(position_and_angle)
|
159
|
+
position_and_angle = nil
|
160
|
+
elsif list_of_color_stops?(position_and_angle)
|
161
|
+
color_stops = position_and_angle.values + color_stops
|
162
|
+
position_and_angle = nil
|
163
|
+
end
|
164
|
+
position_and_angle = nil if position_and_angle && !position_and_angle.to_bool
|
165
|
+
|
166
|
+
# Support legacy use of the color-stops() function
|
167
|
+
if color_stops.size == 1 && list_of_color_stops?(color_stops.first)
|
168
|
+
color_stops = color_stops.first.values
|
169
|
+
end
|
170
|
+
LinearGradient.new(position_and_angle, send(:color_stops, *color_stops))
|
171
|
+
end
|
172
|
+
|
39
173
|
# returns color-stop() calls for use in webkit.
|
40
174
|
def grad_color_stops(color_list)
|
175
|
+
stops = color_stops_in_percentages(color_list).map do |stop, color|
|
176
|
+
"color-stop(#{stop.inspect}, #{color.inspect})"
|
177
|
+
end
|
178
|
+
Sass::Script::String.new(stops.join(", "))
|
179
|
+
end
|
180
|
+
|
181
|
+
def color_stops_in_percentages(color_list)
|
41
182
|
assert_list(color_list)
|
42
183
|
normalize_stops!(color_list)
|
43
184
|
max = color_list.values.last.stop
|
@@ -45,16 +186,14 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
45
186
|
color_stops = color_list.values.map do |pos|
|
46
187
|
# have to convert absolute units to percentages for use in color stop functions.
|
47
188
|
stop = pos.stop
|
48
|
-
stop = stop.div(max).times(Sass::Script::Number.new(100,["%"])) if stop.numerator_units == max.numerator_units
|
189
|
+
stop = stop.div(max).times(Sass::Script::Number.new(100,["%"])) if stop.numerator_units == max.numerator_units && max.numerator_units != ["%"]
|
49
190
|
# Make sure the color stops are specified in the right order.
|
50
191
|
if last_value && last_value.value > stop.value
|
51
192
|
raise Sass::SyntaxError.new("Color stops must be specified in increasing order")
|
52
193
|
end
|
53
194
|
last_value = stop
|
54
|
-
|
195
|
+
[stop, pos.color]
|
55
196
|
end
|
56
|
-
|
57
|
-
Sass::Script::String.new(color_stops.join(", "))
|
58
197
|
end
|
59
198
|
|
60
199
|
# returns the end position of the gradient from the color stop
|
@@ -102,9 +241,11 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
102
241
|
else
|
103
242
|
case position
|
104
243
|
when /top|bottom/
|
105
|
-
"
|
244
|
+
"center #{position}"
|
106
245
|
when /left|right/
|
107
|
-
"#{position}
|
246
|
+
"#{position} center"
|
247
|
+
when /center/
|
248
|
+
"center center"
|
108
249
|
else
|
109
250
|
position
|
110
251
|
end
|
@@ -120,35 +261,144 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
120
261
|
def color_stops(*args)
|
121
262
|
List.new(*args.map do |arg|
|
122
263
|
case arg
|
264
|
+
when ColorStop
|
265
|
+
arg
|
123
266
|
when Sass::Script::Color
|
124
267
|
ColorStop.new(arg)
|
125
268
|
when Sass::Script::String
|
126
269
|
# We get a string as the result of concatenation
|
127
270
|
# So we have to reparse the expression
|
128
|
-
|
271
|
+
parse_color_stop(arg)
|
272
|
+
else
|
273
|
+
raise Sass::SyntaxError, "Not a valid color stop: #{arg.class.name}: #{arg}"
|
274
|
+
end
|
275
|
+
end)
|
276
|
+
end
|
277
|
+
|
278
|
+
def linear_svg_gradient(color_stops, start)
|
279
|
+
x1, y1 = grad_point(start).to_s.split
|
280
|
+
x2, y2 = grad_point(opposite_position(start)).to_s.split
|
281
|
+
stops = color_stops_in_percentages(color_stops)
|
282
|
+
|
283
|
+
svg = linear_svg(stops, x1, y1, x2, y2)
|
284
|
+
inline_image_string(svg.gsub(/\s+/, ' '), 'image/svg+xml')
|
285
|
+
end
|
286
|
+
|
287
|
+
def radial_svg_gradient(color_stops, center)
|
288
|
+
cx, cy = grad_point(center).to_s.split
|
289
|
+
r = grad_end_position(color_stops, Sass::Script::Bool.new(true))
|
290
|
+
stops = color_stops_in_percentages(color_stops)
|
291
|
+
|
292
|
+
svg = radial_svg(stops, cx, cy, r)
|
293
|
+
inline_image_string(svg.gsub(/\s+/, ' '), 'image/svg+xml')
|
294
|
+
end
|
295
|
+
|
296
|
+
# Returns a comma-delimited list after removing any non-true values
|
297
|
+
def compact(*args)
|
298
|
+
List.new(*args.reject{|a| !a.to_bool})
|
299
|
+
end
|
300
|
+
|
301
|
+
# Returns a list object from a value that was passed.
|
302
|
+
# This can be used to unpack a space separated list that got turned
|
303
|
+
# into a string by sass before it was passed to a mixin.
|
304
|
+
def _compass_list(arg)
|
305
|
+
return arg if arg.is_a?(List)
|
306
|
+
values = case arg
|
307
|
+
when Sass::Script::String
|
129
308
|
expr = Sass::Script::Parser.parse(arg.value, 0, 0)
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
color = expr
|
135
|
-
when Sass::Script::Operation
|
136
|
-
unless expr.instance_variable_get("@operator") == :concat
|
137
|
-
# This should never happen.
|
138
|
-
raise Sass::SyntaxError, "Couldn't parse a color stop from: #{arg.value}"
|
139
|
-
end
|
140
|
-
color = expr.instance_variable_get("@operand1")
|
141
|
-
stop = expr.instance_variable_get("@operand2")
|
309
|
+
if expr.is_a?(Sass::Script::Operation)
|
310
|
+
extract_list_values(expr)
|
311
|
+
elsif expr.is_a?(Sass::Script::Funcall)
|
312
|
+
expr.perform(Sass::Environment.new) #we already evaluated the args in context so no harm in using a fake env
|
142
313
|
else
|
143
|
-
|
314
|
+
[arg]
|
144
315
|
end
|
145
|
-
ColorStop.new(color, stop)
|
146
316
|
else
|
147
|
-
|
317
|
+
[arg]
|
148
318
|
end
|
149
|
-
|
319
|
+
|
320
|
+
SpaceList.new(*values)
|
321
|
+
end
|
322
|
+
|
323
|
+
def _compass_list_size(list)
|
324
|
+
Sass::Script::Number.new(list.size)
|
325
|
+
end
|
326
|
+
|
327
|
+
# Get the nth value from a list
|
328
|
+
def _compass_nth(list, place)
|
329
|
+
if place.value == "last"
|
330
|
+
list.values.last
|
331
|
+
elsif place.value == "first"
|
332
|
+
list.values.first
|
333
|
+
else
|
334
|
+
list.values[place.value - 1]
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
def _compass_space_list(list)
|
339
|
+
if list.is_a?(List) && !list.is_a?(SpaceList)
|
340
|
+
SpaceList.new(*list.values)
|
341
|
+
elsif list.is_a?(SpaceList)
|
342
|
+
list
|
343
|
+
else
|
344
|
+
SpaceList.new(list)
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
# slice a sublist from a list
|
349
|
+
def _compass_slice(list, start_index, end_index = nil)
|
350
|
+
end_index ||= Sass::Script::Number.new(-1)
|
351
|
+
start_index = start_index.value
|
352
|
+
end_index = end_index.value
|
353
|
+
start_index -= 1 unless start_index < 0
|
354
|
+
end_index -= 1 unless end_index < 0
|
355
|
+
list.class.new *list.values[start_index..end_index]
|
356
|
+
end
|
357
|
+
|
358
|
+
%w(webkit moz o ms svg).each do |prefix|
|
359
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
360
|
+
def _#{prefix}(*args)
|
361
|
+
List.new(*args.map! do |a|
|
362
|
+
if a.is_a?(List)
|
363
|
+
a.class.new(*a.values.map{|v| v.respond_to?(:to_#{prefix}) ? v.to_#{prefix} : v})
|
364
|
+
else
|
365
|
+
a.respond_to?(:to_#{prefix}) ? a.to_#{prefix} : a
|
366
|
+
end
|
367
|
+
end)
|
368
|
+
end
|
369
|
+
RUBY
|
370
|
+
end
|
371
|
+
|
372
|
+
# Check if any of the arguments passed have a tendency towards vendor prefixing.
|
373
|
+
def prefixed(prefix, *args)
|
374
|
+
method = prefix.value.sub(/^-/,"to_").to_sym
|
375
|
+
args.map!{|a| a.is_a?(List) ? a.values : a}.flatten!
|
376
|
+
Sass::Script::Bool.new(args.any?{|a| a.respond_to?(method)})
|
150
377
|
end
|
378
|
+
|
151
379
|
private
|
380
|
+
# After using the sass script parser to parse a string, this reconstructs
|
381
|
+
# a list from operands to the space/concat operation
|
382
|
+
def extract_list_values(operation)
|
383
|
+
left = operation.instance_variable_get("@operand1")
|
384
|
+
right = operation.instance_variable_get("@operand2")
|
385
|
+
left = extract_list_values(left) if left.is_a?(Sass::Script::Operation)
|
386
|
+
right = extract_list_values(right) if right.is_a?(Sass::Script::Operation)
|
387
|
+
left = literalize(left) unless left.is_a?(Array)
|
388
|
+
right = literalize(right) unless right.is_a?(Array)
|
389
|
+
Array(left) + Array(right)
|
390
|
+
end
|
391
|
+
# Makes a literal from other various script nodes.
|
392
|
+
def literalize(node)
|
393
|
+
case node
|
394
|
+
when Sass::Script::Literal
|
395
|
+
node
|
396
|
+
when Sass::Script::Funcall
|
397
|
+
node.perform(Sass::Environment.new)
|
398
|
+
else
|
399
|
+
Sass::Script::String.new(node.to_s)
|
400
|
+
end
|
401
|
+
end
|
152
402
|
def normalize_stops!(color_list)
|
153
403
|
positions = color_list.values
|
154
404
|
# fill in the start and end positions, if unspecified
|
@@ -182,9 +432,77 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
182
432
|
end
|
183
433
|
nil
|
184
434
|
end
|
435
|
+
|
185
436
|
def assert_list(value)
|
186
437
|
return if value.is_a?(List)
|
187
438
|
raise ArgumentError.new("#{value.inspect} is not a list of color stops. Expected: color_stops(<color> <number>?, ...)")
|
188
439
|
end
|
440
|
+
|
441
|
+
def parse_color_stop(arg)
|
442
|
+
return ColorStop.new(arg) if arg.is_a?(Sass::Script::Color)
|
443
|
+
return nil unless arg.is_a?(Sass::Script::String)
|
444
|
+
color = stop = nil
|
445
|
+
expr = Sass::Script::Parser.parse(arg.value, 0, 0)
|
446
|
+
case expr
|
447
|
+
when Sass::Script::Color
|
448
|
+
color = expr
|
449
|
+
when Sass::Script::Funcall
|
450
|
+
color = expr
|
451
|
+
when Sass::Script::Operation
|
452
|
+
unless [:concat, :space].include?(expr.instance_variable_get("@operator"))
|
453
|
+
# This should never happen.
|
454
|
+
raise Sass::SyntaxError, "Couldn't parse a color stop from: #{arg.value}"
|
455
|
+
end
|
456
|
+
color = expr.instance_variable_get("@operand1")
|
457
|
+
stop = expr.instance_variable_get("@operand2")
|
458
|
+
else
|
459
|
+
raise Sass::SyntaxError, "Couldn't parse a color stop from: #{arg.value}"
|
460
|
+
end
|
461
|
+
ColorStop.new(color, stop)
|
462
|
+
end
|
463
|
+
|
464
|
+
def color_stop?(arg)
|
465
|
+
parse_color_stop(arg)
|
466
|
+
rescue
|
467
|
+
nil
|
468
|
+
end
|
469
|
+
|
470
|
+
def list_of_color_stops?(arg)
|
471
|
+
arg.is_a?(List) && arg.values.first.is_a?(ColorStop)
|
472
|
+
end
|
473
|
+
|
474
|
+
def linear_svg(color_stops, x1, y1, x2, y2)
|
475
|
+
gradient = %Q{<linearGradient id="grad" x1="#{x1}" y1="#{y1}" x2="#{x2}" y2="#{y2}">#{color_stops_svg(color_stops)}</linearGradient>}
|
476
|
+
svg(gradient)
|
477
|
+
end
|
478
|
+
|
479
|
+
def radial_svg(color_stops, cx, cy, r)
|
480
|
+
gradient = %Q{<radialGradient id="grad" gradientUnits="userSpaceOnUse" cx="#{cx}" cy="#{cy}" r="#{r}">#{color_stops_svg(color_stops)}</radialGradient>}
|
481
|
+
svg(gradient)
|
482
|
+
end
|
483
|
+
|
484
|
+
# color_stops = array of: [stop, color]
|
485
|
+
def color_stops_svg(color_stops)
|
486
|
+
color_stops.each.map{ |stop, color|
|
487
|
+
%{<stop offset="#{stop.to_s}" stop-color="#{color.inspect}"/>}
|
488
|
+
}.join
|
489
|
+
end
|
490
|
+
|
491
|
+
def svg(gradient)
|
492
|
+
svg = <<-EOS
|
493
|
+
<?xml version="1.0" encoding="utf-8"?>
|
494
|
+
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"><defs>#{gradient}</defs><rect x="0" y="0" width="100%" height="100%" fill="url(#grad)" /></svg>
|
495
|
+
EOS
|
496
|
+
end
|
497
|
+
end
|
498
|
+
class LinearGradient < Sass::Script::Literal
|
499
|
+
include Functions
|
500
|
+
include Compass::SassExtensions::Functions::Constants
|
501
|
+
include Compass::SassExtensions::Functions::InlineImage
|
502
|
+
end
|
503
|
+
class RadialGradient < Sass::Script::Literal
|
504
|
+
include Functions
|
505
|
+
include Compass::SassExtensions::Functions::Constants
|
506
|
+
include Compass::SassExtensions::Functions::InlineImage
|
189
507
|
end
|
190
508
|
end
|