Skip to content

Commit

Permalink
gradent tests updated for linear
Browse files Browse the repository at this point in the history
  • Loading branch information
scottdavis committed Feb 15, 2013
1 parent 75d9005 commit 49fad59
Show file tree
Hide file tree
Showing 9 changed files with 155 additions and 64 deletions.
2 changes: 1 addition & 1 deletion frameworks/compass/stylesheets/compass/_support.scss
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ $experimental-support-for-mozilla : true !default;
// Support for webkit in experimental css3 properties (-webkit).
$experimental-support-for-webkit : true !default;
// Support for webkit's original (non-standard) gradient syntax.
$support-for-original-webkit-gradients : true !default;
$support-for-original-webkit-gradients : false !default;
// Support for opera in experimental css3 properties (-o).
$experimental-support-for-opera : true !default;
// Support for microsoft in experimental css3 properties (-ms).
Expand Down
17 changes: 17 additions & 0 deletions frameworks/compass/stylesheets/compass/css3/_images.scss
Original file line number Diff line number Diff line change
Expand Up @@ -130,3 +130,20 @@
@if $experimental-support-for-svg and prefixed(-svg, $value) { content: -svg($value); }
content: $value ;
}

$use-legacy-gradient-syntax: true !default;

@function convert-gradient($angle, $details...) {
$new_angle : convert_angle_to_offical($angle);
@return "linear-gradient(#{$new_angle}, #{$details})";
}

@function linear_gradient( $angle, $details...) {
@if $use-legacy-gradient-syntax {
@return _linear-gradient_legacy($angle, $details...);
}@else{
@return _linear-gradient($angle, $details...)
}

}

74 changes: 68 additions & 6 deletions lib/compass/sass_extensions/functions/gradient_support.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ module ClassMethods
def standardized_prefix(prefix)
class_eval %Q{
def to_#{prefix}(options = self.options)
Sass::Script::String.new("-#{prefix}-\#{to_s(options)}")
Sass::Script::String.new("-#{prefix}-\#{to_s_prefixed(options)}")
end
}
end
Expand Down Expand Up @@ -134,6 +134,10 @@ def to_s(options = self.options)
s << color_stops.to_s(options)
s << ")"
end

def to_s_prefixed(options = self.options)
to_s(options)
end

standardized_prefix :webkit
standardized_prefix :moz
Expand Down Expand Up @@ -169,23 +173,48 @@ def to_css2(options = self.options)
class LinearGradient < Sass::Script::Literal
include Gradient

attr_accessor :color_stops, :position_or_angle
attr_accessor :color_stops, :position_or_angle, :legacy

def children
[color_stops, position_or_angle].compact
end

def initialize(position_or_angle, color_stops)
def initialize(position_or_angle, color_stops, legacy=false)
unless color_stops.value.size >= 2
raise Sass::SyntaxError, "At least two color stops are required for a linear-gradient"
end
self.position_or_angle = position_or_angle
self.color_stops = color_stops
self.legacy = legacy
end

def to_s(options = self.options)
def to_s_prefixed(options = self.options)
s = "linear-gradient("
s << position_or_angle.to_s(options) << ", " if position_or_angle
if legacy
s << position_or_angle.to_s(options) << ", " if position_or_angle
else
s << convert_to_or_from_legacy(position_or_angle, options) << ", " if position_or_angle
end
s << color_stops.to_s(options)
s << ")"
end

def convert_to_or_from_legacy(position_or_angle, options = self.options)
input = if position_or_angle.is_a?(Sass::Script::Number)
position_or_angle
else
Sass::Script::List.new(position_or_angle.to_s.split(' ').map {|s| Sass::Script::String.new(s) }, :space)
end
return convert_angle_from_offical(input).to_s(options)
end

def to_s(options = self.options)
s = 'linear-gradient('
if legacy
s << convert_to_or_from_legacy(position_or_angle, options) << ", " if position_or_angle
else
s << position_or_angle.to_s(options) << ", " if position_or_angle
end
s << color_stops.to_s(options)
s << ")"
end
Expand Down Expand Up @@ -229,6 +258,29 @@ def to_css2(options = self.options)
end

module Functions

def convert_angle_from_offical(deg)
if deg.is_a?(Sass::Script::Number)
return Sass::Script::Number.new((deg.value.to_f - 450).abs % 360, ['deg'])
else
args = deg.value
direction = []
if args[0] == Sass::Script::String.new('to')
if args.size < 2
direction = args
else
direction << opposite_position(args[1])
end
else
direction << Sass::Script::String.new('to')
args.each do |pos|
direction << opposite_position(pos)
end
end
return Sass::Script::String.new(direction.join(' '))
end
end

# given a position list, return a corresponding position in percents
# otherwise, returns the original argument
def grad_point(position)
Expand Down Expand Up @@ -314,7 +366,7 @@ def radial_gradient(position_or_angle, shape_and_size, *color_stops)
RadialGradient.new(position_or_angle, shape_and_size, send(:color_stops, *color_stops))
end

def linear_gradient(position_or_angle, *color_stops)
def _build_linear_gradient(position_or_angle, *color_stops)
if color_stop?(position_or_angle)
color_stops.unshift(position_or_angle)
position_or_angle = nil
Expand All @@ -328,9 +380,19 @@ def linear_gradient(position_or_angle, *color_stops)
if color_stops.size == 1 && (stops = list_of_color_stops?(color_stops.first))
color_stops = stops
end
return [position_or_angle, color_stops]
end

def _linear_gradient(position_or_angle, *color_stops)
position_or_angle, color_stops = _build_linear_gradient(position_or_angle, *color_stops)
LinearGradient.new(position_or_angle, send(:color_stops, *color_stops))
end

def _linear_gradient_legacy(position_or_angle, *color_stops)
position_or_angle, color_stops = _build_linear_gradient(position_or_angle, *color_stops)
LinearGradient.new(position_or_angle, send(:color_stops, *color_stops), true)
end

# returns color-stop() calls for use in webkit.
def grad_color_stops(color_list)
stops = color_stops_in_percentages(color_list).map do |stop, color|
Expand Down
Loading

0 comments on commit 49fad59

Please sign in to comment.