sass-extras 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/sass/extras.rb +2 -0
- data/lib/sass/extras/contrast.rb +5 -4
- data/lib/sass/extras/variables.rb +51 -0
- data/lib/sass/extras/version.rb +1 -1
- data/lib/sass/extras/yuv.rb +15 -15
- data/specs/variables_spec.rb +48 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 609d26e3692dd22169ab7d3a5d5d3220be4daedf
|
4
|
+
data.tar.gz: 007c38b893bd6ed43f70cd913df2521ab79cbca1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1cd4307bcad889513aa8aa9dda189a5623543297cf5c417d926ee96fa2df8f42e7afd33d5b585995cb58ffa3e832e7837caae394624191ad5d63d7e308b6f65
|
7
|
+
data.tar.gz: 3c3cb8cc6e889056d5fe5d5f9edb90931f78988c1414fbc6c23f9a0e23c658260bcf2093757cf0eb778358e013e1e6b9c0cb467febd6dac4254442821379be9b
|
data/lib/sass/extras.rb
CHANGED
@@ -3,6 +3,7 @@ require "sass/extras/version"
|
|
3
3
|
require "sass/extras/contrast"
|
4
4
|
require "sass/extras/inline_color_image"
|
5
5
|
require "sass/extras/svg_data_urls"
|
6
|
+
require "sass/extras/variables"
|
6
7
|
require "sass/extras/yuv"
|
7
8
|
|
8
9
|
Sass::Script::Color.class_eval do
|
@@ -14,5 +15,6 @@ Sass::Script::Functions.module_eval do
|
|
14
15
|
include Sass::Extras::Contrast::Functions
|
15
16
|
include Sass::Extras::InlineColorImage
|
16
17
|
include Sass::Extras::SvgDataUrls
|
18
|
+
include Sass::Extras::Variables
|
17
19
|
include Sass::Extras::YUV::Functions
|
18
20
|
end
|
data/lib/sass/extras/contrast.rb
CHANGED
@@ -28,7 +28,8 @@ module Sass
|
|
28
28
|
def luminance
|
29
29
|
# http://www.w3.org/TR/WCAG20/#relativeluminancedef
|
30
30
|
norm_rgb = rgb.map { |value| value.to_f / 255 }
|
31
|
-
|
31
|
+
relative_luminance = norm_rgb.map { |v| v <= 0.03928 ? v / 12.92 : ((v + 0.055) / 1.055)**2.4 }
|
32
|
+
Utils.sum(Utils.mul(relative_luminance, LUMINANCE_COEFS))
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
@@ -47,9 +48,9 @@ module Sass
|
|
47
48
|
direction = color.brightness > 127 ? darken_method : lighten_method
|
48
49
|
new_color = seed_color
|
49
50
|
percentage = 0.0
|
50
|
-
until conform(new_color, color, wcag20_level.value)
|
51
|
+
until conform(new_color, color, wcag20_level.value) || percentage > 100.0
|
51
52
|
amount = Sass::Script::Number.new percentage, ['%']
|
52
|
-
new_color =
|
53
|
+
new_color = send(direction, seed_color, amount)
|
53
54
|
percentage += 0.1
|
54
55
|
end
|
55
56
|
new_color
|
@@ -123,7 +124,7 @@ module Sass
|
|
123
124
|
end
|
124
125
|
|
125
126
|
def self.sq(array)
|
126
|
-
array.map { |e| e
|
127
|
+
array.map { |e| e**2 }
|
127
128
|
end
|
128
129
|
end
|
129
130
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Sass
|
2
|
+
module Extras
|
3
|
+
module Variables
|
4
|
+
def self.included(base)
|
5
|
+
base.declare :variable_get, [:name]
|
6
|
+
base.declare :global_variable_get, [:name]
|
7
|
+
end
|
8
|
+
|
9
|
+
# Get the value of a variable with the given name, if it exists in the
|
10
|
+
# current scope or in the global scope.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# $a-false-value: false;
|
14
|
+
# variable-get(a-false-value) => false
|
15
|
+
#
|
16
|
+
# variable-get(nonexistent) => null
|
17
|
+
#
|
18
|
+
# @overload variable_get($name)
|
19
|
+
# @param $name [Sass::Script::Value::String] The name of the variable to
|
20
|
+
# check. The name should not include the `$`.
|
21
|
+
# @return [Sass::Script::Value::Bool] Whether the variable is defined in
|
22
|
+
# the current scope.
|
23
|
+
def variable_get(name)
|
24
|
+
assert_type name, :String, :name
|
25
|
+
environment.caller.var(name.value)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Check whether a variable with the given name exists in the global
|
29
|
+
# scope (at the top level of the file).
|
30
|
+
#
|
31
|
+
# @example
|
32
|
+
# $a-false-value: false;
|
33
|
+
# global-variable-get(a-false-value) => false
|
34
|
+
#
|
35
|
+
# .foo {
|
36
|
+
# $some-var: false;
|
37
|
+
# global-variable-get(some-var) => null
|
38
|
+
# }
|
39
|
+
#
|
40
|
+
# @overload global_variable_get($name)
|
41
|
+
# @param $name [Sass::Script::Value::String] The name of the variable to
|
42
|
+
# check. The name should not include the `$`.
|
43
|
+
# @return [Sass::Script::Value::Bool] Whether the variable is defined in
|
44
|
+
# the global scope.
|
45
|
+
def global_variable_get(name)
|
46
|
+
assert_type name, :String, :name
|
47
|
+
environment.global_env.var(name.value)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/sass/extras/version.rb
CHANGED
data/lib/sass/extras/yuv.rb
CHANGED
@@ -13,8 +13,8 @@ module Sass
|
|
13
13
|
r, g, b = rgb.map { |k| k / 255.0 }
|
14
14
|
y = r * WR + g * WG + b * WB
|
15
15
|
y = 1.0 if y == W_SUM
|
16
|
-
u = U_MAX*(b - y)/(1 - WB)
|
17
|
-
v = V_MAX*(r - y)/(1 - WR)
|
16
|
+
u = U_MAX * (b - y) / (1 - WB)
|
17
|
+
v = V_MAX * (r - y) / (1 - WR)
|
18
18
|
[y, Utils.restrict(u, -U_MAX..U_MAX), Utils.restrict(v, -V_MAX..V_MAX)]
|
19
19
|
end
|
20
20
|
|
@@ -50,17 +50,17 @@ module Sass
|
|
50
50
|
|
51
51
|
yv = y.value
|
52
52
|
if y.numerator_units == ["%"] && y.denominator_units.empty?
|
53
|
-
|
54
|
-
yv
|
53
|
+
fail ArgumentError, "Brightness (Y') value #{y} must be between 0% and 100% inclusive" unless (0..100).include?(y.value)
|
54
|
+
yv /= 100.0
|
55
55
|
else
|
56
|
-
|
56
|
+
fail ArgumentError, "Brightness (Y') value #{y} must be between 0 and 1.0 inclusive" unless (0..1.0).include?(y.value)
|
57
57
|
end
|
58
|
-
|
59
|
-
|
58
|
+
fail ArgumentError, "Chrominance (U) value #{u} must be between -#{U_MAX} and #{U_MAX} inclusive" unless (-U_MAX..U_MAX).include?(u.value)
|
59
|
+
fail ArgumentError, "Chrominance (V) value #{v} must be between -#{V_MAX} and #{V_MAX} inclusive" unless (-V_MAX..V_MAX).include?(v.value)
|
60
60
|
|
61
|
-
r = yv + v.value * (1 - WR)/(V_MAX)
|
62
|
-
g = yv - u.value * (WB * (1 - WB))/(V_MAX * WG) - v.value * (WR * (1 - WR))/(V_MAX * WG)
|
63
|
-
b = yv + u.value * (1 - WB)/U_MAX
|
61
|
+
r = yv + v.value * (1 - WR) / (V_MAX)
|
62
|
+
g = yv - u.value * (WB * (1 - WB)) / (V_MAX * WG) - v.value * (WR * (1 - WR)) / (V_MAX * WG)
|
63
|
+
b = yv + u.value * (1 - WB) / U_MAX
|
64
64
|
|
65
65
|
rgb = [r, g, b].map { |c| [0, [255, c * 255].min].max }
|
66
66
|
Sass::Script::Color.new(rgb)
|
@@ -68,13 +68,13 @@ module Sass
|
|
68
68
|
|
69
69
|
def yuva(y, u, v, a)
|
70
70
|
assert_type a, :Number, :a
|
71
|
-
yuv(y, u, v).with(:
|
71
|
+
yuv(y, u, v).with(alpha: a.value)
|
72
72
|
end
|
73
73
|
|
74
74
|
# @param color [Color]
|
75
75
|
# @param amount [Number] between 0 and 1.0, or 0% and 100%
|
76
76
|
def set_brightness(color, amount)
|
77
|
-
adjust_brightness(color, amount) { |c,
|
77
|
+
adjust_brightness(color, amount) { |c, _| c }
|
78
78
|
end
|
79
79
|
|
80
80
|
# @param color [Color]
|
@@ -107,10 +107,10 @@ module Sass
|
|
107
107
|
y, u, v, a = color.yuva.map { |x| Sass::Script::Number.new x }
|
108
108
|
c = amount.value
|
109
109
|
if amount.numerator_units == ["%"] && amount.denominator_units.empty?
|
110
|
-
|
111
|
-
c
|
110
|
+
fail ArgumentError, "Amount value #{amount} must be between 0% and 100% inclusive" unless (0..100).include?(c)
|
111
|
+
c /= 100.0
|
112
112
|
else
|
113
|
-
|
113
|
+
fail ArgumentError, "Amount value #{amount} must be between 0 and 1.0 inclusive" unless (0..1.0).include?(c)
|
114
114
|
end
|
115
115
|
y = Sass::Script::Number.new yield(c, y.value)
|
116
116
|
yuva(y, u, v, a)
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative "spec_helper"
|
2
|
+
|
3
|
+
describe Sass::Extras::Variables do
|
4
|
+
describe "variable-get" do
|
5
|
+
it "gets the value of a local variable" do
|
6
|
+
unindent(<<-CSS).must_equal render(unindent(<<-SCSS))
|
7
|
+
a {
|
8
|
+
b: 42; }
|
9
|
+
CSS
|
10
|
+
a {
|
11
|
+
$my-local-var: 42;
|
12
|
+
b: variable-get(my-local-var); }
|
13
|
+
SCSS
|
14
|
+
end
|
15
|
+
|
16
|
+
it "also gets variables from the global scope" do
|
17
|
+
unindent(<<-CSS).must_equal render(unindent(<<-SCSS))
|
18
|
+
a {
|
19
|
+
b: 42; }
|
20
|
+
CSS
|
21
|
+
$my-global-var: 42;
|
22
|
+
a {
|
23
|
+
b: variable-get(my-global-var); }
|
24
|
+
SCSS
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "global-variable-get" do
|
29
|
+
it "get the value of a global variable" do
|
30
|
+
unindent(<<-CSS).must_equal render(unindent(<<-SCSS))
|
31
|
+
a {
|
32
|
+
b: 42; }
|
33
|
+
CSS
|
34
|
+
$my-global-var: 42;
|
35
|
+
a {
|
36
|
+
b: global-variable-get(my-global-var); }
|
37
|
+
SCSS
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def unindent(s)
|
42
|
+
s.gsub(/^#{s.scan(/^[ \t]+(?=\S)/).min}/, "")
|
43
|
+
end
|
44
|
+
|
45
|
+
def render(scss)
|
46
|
+
Sass::Engine.new(scss, syntax: :scss).render
|
47
|
+
end
|
48
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sass-extras
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Haagen Michaelsen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sass
|
@@ -112,11 +112,13 @@ files:
|
|
112
112
|
- lib/sass/extras/contrast.rb
|
113
113
|
- lib/sass/extras/inline_color_image.rb
|
114
114
|
- lib/sass/extras/svg_data_urls.rb
|
115
|
+
- lib/sass/extras/variables.rb
|
115
116
|
- lib/sass/extras/version.rb
|
116
117
|
- lib/sass/extras/yuv.rb
|
117
118
|
- sass-extras.gemspec
|
118
119
|
- specs/contrast_spec.rb
|
119
120
|
- specs/spec_helper.rb
|
121
|
+
- specs/variables_spec.rb
|
120
122
|
- specs/yuv_spec.rb
|
121
123
|
homepage: https://github.com/tobiashm/sass-extras
|
122
124
|
licenses:
|
@@ -138,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
140
|
version: '0'
|
139
141
|
requirements: []
|
140
142
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.4.
|
143
|
+
rubygems_version: 2.4.8
|
142
144
|
signing_key:
|
143
145
|
specification_version: 4
|
144
146
|
summary: A collection of SASS extensions.
|