bourbon 4.1.0 → 4.2.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/.gitignore +4 -3
- data/.hound.yml +4 -0
- data/.npmignore +5 -2
- data/.scss-lint.yml +175 -0
- data/LICENSE.md +6 -8
- data/README.md +13 -16
- data/Rakefile +6 -4
- data/app/assets/stylesheets/_bourbon-deprecated-upcoming.scss +16 -7
- data/app/assets/stylesheets/_bourbon.scss +28 -27
- data/app/assets/stylesheets/addons/_border-color.scss +26 -0
- data/app/assets/stylesheets/addons/_border-radius.scss +48 -0
- data/app/assets/stylesheets/addons/_border-style.scss +25 -0
- data/app/assets/stylesheets/addons/_border-width.scss +25 -0
- data/app/assets/stylesheets/addons/_buttons.scss +64 -0
- data/app/assets/stylesheets/addons/_clearfix.scss +17 -10
- data/app/assets/stylesheets/addons/_ellipsis.scss +22 -0
- data/app/assets/stylesheets/addons/_font-stacks.scss +31 -0
- data/app/assets/stylesheets/addons/_hide-text.scss +23 -8
- data/app/assets/stylesheets/addons/_margin.scss +26 -0
- data/app/assets/stylesheets/addons/_padding.scss +26 -0
- data/app/assets/stylesheets/addons/_position.scss +24 -2
- data/app/assets/stylesheets/addons/_prefixer.scss +36 -15
- data/app/assets/stylesheets/addons/_size.scss +30 -1
- data/app/assets/stylesheets/addons/_text-inputs.scss +112 -0
- data/app/assets/stylesheets/addons/_timing-functions.scss +7 -5
- data/app/assets/stylesheets/addons/_triangle.scss +11 -11
- data/app/assets/stylesheets/addons/_word-wrap.scss +19 -0
- data/app/assets/stylesheets/css3/_animation.scss +14 -23
- data/app/assets/stylesheets/css3/_appearance.scss +1 -1
- data/app/assets/stylesheets/css3/_backface-visibility.scss +0 -3
- data/app/assets/stylesheets/css3/_background-image.scss +1 -1
- data/app/assets/stylesheets/css3/_background.scss +3 -3
- data/app/assets/stylesheets/css3/_border-image.scss +3 -3
- data/app/assets/stylesheets/css3/_calc.scss +1 -1
- data/app/assets/stylesheets/css3/_columns.scss +8 -8
- data/app/assets/stylesheets/css3/_filter.scss +0 -1
- data/app/assets/stylesheets/css3/_flex-box.scss +16 -47
- data/app/assets/stylesheets/css3/_font-feature-settings.scss +1 -7
- data/app/assets/stylesheets/css3/_hyphens.scss +2 -2
- data/app/assets/stylesheets/css3/_image-rendering.scss +6 -6
- data/app/assets/stylesheets/css3/_keyframes.scss +1 -0
- data/app/assets/stylesheets/css3/_linear-gradient.scss +11 -11
- data/app/assets/stylesheets/css3/_radial-gradient.scss +14 -14
- data/app/assets/stylesheets/css3/_selection.scss +39 -11
- data/app/assets/stylesheets/css3/_transform.scss +5 -5
- data/app/assets/stylesheets/css3/_transition.scss +17 -23
- data/app/assets/stylesheets/css3/_user-select.scss +2 -2
- data/app/assets/stylesheets/functions/{_assign.scss → _assign-inputs.scss} +2 -2
- data/app/assets/stylesheets/functions/_contains-falsy.scss +20 -0
- data/app/assets/stylesheets/functions/_contains.scss +16 -2
- data/app/assets/stylesheets/functions/_is-length.scss +5 -1
- data/app/assets/stylesheets/functions/_is-light.scss +21 -0
- data/app/assets/stylesheets/functions/_is-number.scss +11 -0
- data/app/assets/stylesheets/functions/_is-size.scss +8 -1
- data/app/assets/stylesheets/functions/_px-to-em.scss +2 -2
- data/app/assets/stylesheets/functions/_px-to-rem.scss +2 -2
- data/app/assets/stylesheets/functions/_shade.scss +24 -0
- data/app/assets/stylesheets/functions/_strip-units.scss +15 -3
- data/app/assets/stylesheets/functions/_tint.scss +24 -0
- data/app/assets/stylesheets/functions/_transition-property-name.scss +14 -14
- data/app/assets/stylesheets/functions/_unpack.scss +18 -8
- data/app/assets/stylesheets/helpers/_convert-units.scss +2 -2
- data/app/assets/stylesheets/helpers/_directional-values.scss +96 -0
- data/app/assets/stylesheets/helpers/_font-source-declaration.scss +17 -9
- data/app/assets/stylesheets/helpers/_linear-gradient-parser.scss +1 -1
- data/app/assets/stylesheets/helpers/_linear-positions-parser.scss +1 -1
- data/app/assets/stylesheets/helpers/_radial-arg-parser.scss +10 -10
- data/app/assets/stylesheets/helpers/_radial-gradient-parser.scss +4 -4
- data/app/assets/stylesheets/helpers/_radial-positions-parser.scss +2 -2
- data/app/assets/stylesheets/helpers/_str-to-num.scss +3 -3
- data/app/assets/stylesheets/settings/_asset-pipeline.scss +6 -0
- data/app/assets/stylesheets/settings/_prefixer.scss +5 -2
- data/bourbon.gemspec +4 -2
- data/bower.json +8 -6
- data/lib/bourbon/version.rb +1 -1
- data/package.json +1 -1
- data/spec/bourbon/functions/assign_inputs_spec.rb +50 -0
- data/spec/bourbon/functions/contains_spec.rb +27 -0
- data/spec/bourbon/functions/is_length_spec.rb +49 -0
- data/spec/bourbon/functions/is_light_spec.rb +37 -0
- data/spec/bourbon/functions/is_number_spec.rb +43 -0
- data/spec/bourbon/functions/is_size_spec.rb +43 -0
- data/spec/bourbon/functions/modular_scale_spec.rb +43 -0
- data/spec/bourbon/functions/px_to_em_spec.rb +31 -0
- data/spec/fixtures/_setup.scss +1 -0
- data/spec/fixtures/functions/assign-inputs.scss +19 -0
- data/spec/fixtures/functions/contains.scss +28 -0
- data/spec/fixtures/functions/is-length.scss +35 -0
- data/spec/fixtures/functions/is-light.scss +29 -0
- data/spec/fixtures/functions/is-number.scss +31 -0
- data/spec/fixtures/functions/is-size.scss +31 -0
- data/spec/fixtures/functions/modular-scale.scss +29 -0
- data/spec/fixtures/functions/px-to-em.scss +17 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/support/matchers/be_contained_in.rb +10 -0
- data/spec/support/matchers/have_rule.rb +35 -0
- data/spec/support/matchers/have_value.rb +15 -0
- data/spec/support/parser_support.rb +16 -0
- data/spec/support/sass_support.rb +10 -0
- metadata +100 -17
- data/app/assets/stylesheets/addons/_directional-values.scss +0 -111
- data/app/assets/stylesheets/addons/_font-family.scss +0 -5
- data/app/assets/stylesheets/addons/_html5-input-types.scss +0 -90
- data/app/assets/stylesheets/css3/_border-radius.scss +0 -22
- data/app/assets/stylesheets/css3/_box-sizing.scss +0 -4
- data/app/assets/stylesheets/functions/_color-lightness.scss +0 -13
- data/app/assets/stylesheets/functions/_tint-shade.scss +0 -9
- data/app/assets/stylesheets/helpers/_is-num.scss +0 -5
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "assign-inputs" do
|
|
4
|
+
before(:all) do
|
|
5
|
+
ParserSupport.parse_file("functions/assign-inputs")
|
|
6
|
+
@text_inputs_list = [
|
|
7
|
+
"input[type=\"password\"]",
|
|
8
|
+
"input[type=\"text\"]",
|
|
9
|
+
"textarea"
|
|
10
|
+
]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
context "expands plain text inputs" do
|
|
14
|
+
it "finds selectors" do
|
|
15
|
+
@text_inputs_list.each do |input|
|
|
16
|
+
expect(input).to have_rule("color: #ff0000")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context "expands text inputs with pseudo classes" do
|
|
22
|
+
it "finds selectors" do
|
|
23
|
+
list = @text_inputs_list.dup
|
|
24
|
+
list.map! { |input| input + ":active" }
|
|
25
|
+
list.each do |input|
|
|
26
|
+
expect(input).to have_rule("color: #00ff00")
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "expands text inputs when first in list" do
|
|
32
|
+
it "finds selectors" do
|
|
33
|
+
list = @text_inputs_list.dup
|
|
34
|
+
list.push "select"
|
|
35
|
+
list.each do |input|
|
|
36
|
+
expect(input).to have_rule("color: #0000ff")
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context "expands text inputs when middle of list" do
|
|
42
|
+
it "finds selectors" do
|
|
43
|
+
list = @text_inputs_list.dup
|
|
44
|
+
list.unshift "input[type=\"file\"]"
|
|
45
|
+
list.each do |input|
|
|
46
|
+
expect(input).to have_rule("color: #ff00ff")
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "contains" do
|
|
4
|
+
before(:all) do
|
|
5
|
+
ParserSupport.parse_file("functions/contains")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "called on array with single item" do
|
|
9
|
+
it "contains item" do
|
|
10
|
+
expect(".single").to have_rule("color: #fff")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "doesn't contain missing item" do
|
|
14
|
+
expect(".single-missing").to have_rule("color: #000")
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "called with array with multiple items" do
|
|
19
|
+
it "contains item" do
|
|
20
|
+
expect(".multiple").to have_rule("color: #fff")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "doesn't contain missing item" do
|
|
24
|
+
expect(".multiple-missing").to have_rule("color: #000")
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "is-length" do
|
|
4
|
+
before(:all) do
|
|
5
|
+
ParserSupport.parse_file("functions/is-length")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "checks if unitless integer can be represented as a length" do
|
|
9
|
+
it "returns false" do
|
|
10
|
+
expect(".integer").not_to have_rule("color: #fff")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "checks if px can be represented as a length" do
|
|
15
|
+
it "returns true" do
|
|
16
|
+
expect(".pixels").to have_rule("color: #fff")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context "checks if em can be represented as a length" do
|
|
21
|
+
it "returns true" do
|
|
22
|
+
expect(".ems").to have_rule("color: #fff")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context "checks if percent can be represented as a length" do
|
|
27
|
+
it "returns true" do
|
|
28
|
+
expect(".percent").to have_rule("color: #fff")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "parses calculated values" do
|
|
33
|
+
it "returns true" do
|
|
34
|
+
expect(".calc").to have_rule("color: #fff")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context "checks if strings can be represented as a length" do
|
|
39
|
+
it "returns false" do
|
|
40
|
+
expect(".string").not_to have_rule("color: #fff")
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "checks if null can be represented as a length" do
|
|
45
|
+
it "returns false" do
|
|
46
|
+
expect(".null").not_to have_rule("color: #fff")
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "is-light" do
|
|
4
|
+
before(:all) do
|
|
5
|
+
ParserSupport.parse_file("functions/is-light")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "takes a light color" do
|
|
9
|
+
it "and returns true" do
|
|
10
|
+
expect(".pink").to have_rule("color: #000")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "takes a medium-light color" do
|
|
15
|
+
it "and returns true" do
|
|
16
|
+
expect(".sky").to have_rule("color: #000")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context "takes a medium-dark color" do
|
|
21
|
+
it "and returns false" do
|
|
22
|
+
expect(".medium-gray").to have_rule("color: #fff")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context "takes a dark color" do
|
|
27
|
+
it "and returns false" do
|
|
28
|
+
expect(".charcoal").to have_rule("color: #fff")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "takes a translucent color" do
|
|
33
|
+
it "and processes as an opaque color" do
|
|
34
|
+
expect(".translucent").to have_rule("color: #000")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "is-number" do
|
|
4
|
+
before(:all) do
|
|
5
|
+
ParserSupport.parse_file("functions/is-number")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "called with integer" do
|
|
9
|
+
it "is a number" do
|
|
10
|
+
expect(".integer").to have_rule("line-height: 1")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "called with px" do
|
|
15
|
+
it "is a number" do
|
|
16
|
+
expect(".px").to have_rule("line-height: 2px")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context "called with em" do
|
|
21
|
+
it "is a number" do
|
|
22
|
+
expect(".em").to have_rule("line-height: 3em")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context "called with rem" do
|
|
27
|
+
it "is a number" do
|
|
28
|
+
expect(".rem").to have_rule("line-height: 4rem")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "called with percent" do
|
|
33
|
+
it "is a number" do
|
|
34
|
+
expect(".percent").to have_rule("line-height: 5%")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context "called with string" do
|
|
39
|
+
it "is not a number" do
|
|
40
|
+
expect(".string").to_not have_rule("line-height: \"stringy\"")
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "is-size" do
|
|
4
|
+
before(:all) do
|
|
5
|
+
ParserSupport.parse_file("functions/is-size")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "called with integer" do
|
|
9
|
+
it "is not a size" do
|
|
10
|
+
expect(".integer").to_not have_rule("margin-top: 1")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "called with px" do
|
|
15
|
+
it "is a size" do
|
|
16
|
+
expect(".px").to have_rule("margin-top: 2px")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context "called with em" do
|
|
21
|
+
it "is a size" do
|
|
22
|
+
expect(".em").to have_rule("margin-top: 3em")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context "called with rem" do
|
|
27
|
+
it "is a size" do
|
|
28
|
+
expect(".rem").to have_rule("margin-top: 4rem")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "called with percent" do
|
|
33
|
+
it "is a size" do
|
|
34
|
+
expect(".percent").to have_rule("margin-top: 5%")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context "called with string" do
|
|
39
|
+
it "is not a size" do
|
|
40
|
+
expect(".string").to_not have_rule("margin-top: \"stringy\"")
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "modular-scale" do
|
|
4
|
+
before(:all) do
|
|
5
|
+
ParserSupport.parse_file("functions/modular-scale")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "called with arguments (1, $value: 2em)" do
|
|
9
|
+
it "outputs double the first value from the default scale" do
|
|
10
|
+
expect(".one-base-two").to have_rule("font-size: 2.666em")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "called with arguments (1, $value: 3em)" do
|
|
15
|
+
it "outputs triple the first value from the default scale" do
|
|
16
|
+
expect(".one-base-three").to have_rule("font-size: 3.999em")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context "called with arguments (1, $value: 4em 6em)" do
|
|
21
|
+
it "outputs quadruple the first value from the default scale" do
|
|
22
|
+
expect(".one-double-value").to have_rule("font-size: 1.12556em")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context "called with arguments (1, $ratio: $golden-ratio)" do
|
|
27
|
+
it "output the first value from the golden ratio scale" do
|
|
28
|
+
expect(".one-golden-ratio").to have_rule("font-size: 1.618em")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "called with argument (2)" do
|
|
33
|
+
it "outputs the second value from the default scale" do
|
|
34
|
+
expect(".two-base-one").to have_rule("font-size: 1.77689em")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context "called with arguments (2, $value: 4em 6em)" do
|
|
39
|
+
it "outputs sextuple the second value from the default scale" do
|
|
40
|
+
expect(".two-double-value").to have_rule("font-size: 3.55378em")
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "px-to-em" do
|
|
4
|
+
before(:all) do
|
|
5
|
+
ParserSupport.parse_file("functions/px-to-em")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "called with unitless integer" do
|
|
9
|
+
it "outputs ems" do
|
|
10
|
+
expect(".unitless").to have_rule("font-size: 0.75em")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "called with unitless integer and base" do
|
|
15
|
+
it "outputs ems" do
|
|
16
|
+
expect(".unitless-with-base").to have_rule("font-size: 0.66667em")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context "called with px" do
|
|
21
|
+
it "outputs ems" do
|
|
22
|
+
expect(".px").to have_rule("font-size: 1em")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context "called with px" do
|
|
27
|
+
it "outputs ems" do
|
|
28
|
+
expect(".px-with-base").to have_rule("font-size: 1.5em")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "app/assets/stylesheets/bourbon";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
@import "setup";
|
|
2
|
+
|
|
3
|
+
#{assign-inputs($text-inputs-list)} {
|
|
4
|
+
color: #ff0000;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
#{assign-inputs($text-inputs-list, active)} {
|
|
8
|
+
color: #00ff00;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
#{assign-inputs($text-inputs-list)},
|
|
12
|
+
select {
|
|
13
|
+
color: #0000ff;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
input[type="file"],
|
|
17
|
+
#{assign-inputs($text-inputs-list)} {
|
|
18
|
+
color: #ff00ff;
|
|
19
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
@import "setup";
|
|
2
|
+
|
|
3
|
+
$single: "apple";
|
|
4
|
+
$multiple: "pineapple", "banana", "cumquat";
|
|
5
|
+
|
|
6
|
+
@mixin color-contains($list, $values) {
|
|
7
|
+
@if contains($list, $values) {
|
|
8
|
+
color: #fff;
|
|
9
|
+
} @else {
|
|
10
|
+
color: #000;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.single {
|
|
15
|
+
@include color-contains($single, "apple");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.single-missing {
|
|
19
|
+
@include color-contains($single, "pear");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.multiple {
|
|
23
|
+
@include color-contains($multiple, "banana");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.multiple-missing {
|
|
27
|
+
@include color-contains($multiple, "strawberry");
|
|
28
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
@import "setup";
|
|
2
|
+
|
|
3
|
+
@mixin color-length($value) {
|
|
4
|
+
@if is-length($value) {
|
|
5
|
+
color: #fff;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.integer {
|
|
10
|
+
@include color-length(1);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.pixels {
|
|
14
|
+
@include color-length(10px);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.ems {
|
|
18
|
+
@include color-length(10em);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.percent {
|
|
22
|
+
@include color-length(10%);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.calc {
|
|
26
|
+
@include color-length(calc(2em - 5px));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.string {
|
|
30
|
+
@include color-length("stringy");
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.null {
|
|
34
|
+
@include color-length(null);
|
|
35
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
@import "setup";
|
|
2
|
+
|
|
3
|
+
@mixin reverse-color($color) {
|
|
4
|
+
@if is-light($color) {
|
|
5
|
+
color: #000;
|
|
6
|
+
} @else {
|
|
7
|
+
color: #fff;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.pink {
|
|
12
|
+
@include reverse-color(#ffcccc);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.sky {
|
|
16
|
+
@include reverse-color(#aaeeff);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.medium-gray {
|
|
20
|
+
@include reverse-color(#888);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.charcoal {
|
|
24
|
+
@include reverse-color(#333);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.translucent {
|
|
28
|
+
@include reverse-color(rgba(#fff, 0.1));
|
|
29
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
@import "setup";
|
|
2
|
+
|
|
3
|
+
@mixin line-height($number) {
|
|
4
|
+
@if is-number($number) {
|
|
5
|
+
line-height: $number;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.integer {
|
|
10
|
+
@include line-height(1);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.px {
|
|
14
|
+
@include line-height(2px);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.em {
|
|
18
|
+
@include line-height(3em);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.rem {
|
|
22
|
+
@include line-height(4rem);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.percent {
|
|
26
|
+
@include line-height(5%);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.string {
|
|
30
|
+
@include line-height("stringy");
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
@import "setup";
|
|
2
|
+
|
|
3
|
+
@mixin size-margin($size) {
|
|
4
|
+
@if is-size($size) {
|
|
5
|
+
margin-top: $size;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.integer {
|
|
10
|
+
@include size-margin(1);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.px {
|
|
14
|
+
@include size-margin(2px);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.em {
|
|
18
|
+
@include size-margin(3em);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.rem {
|
|
22
|
+
@include size-margin(4rem);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.percent {
|
|
26
|
+
@include size-margin(5%);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.string {
|
|
30
|
+
@include size-margin("stringy");
|
|
31
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
@import "setup";
|
|
2
|
+
|
|
3
|
+
.one {
|
|
4
|
+
&-base-two {
|
|
5
|
+
font-size: modular-scale(1, $value: 2em);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
&-base-three {
|
|
9
|
+
font-size: modular-scale(1, $value: 3em);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
&-double-value {
|
|
13
|
+
font-size: modular-scale(1, $value: 1em 2em);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&-golden-ratio {
|
|
17
|
+
font-size: modular-scale(1, $ratio: $golden);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.two {
|
|
22
|
+
&-base-one {
|
|
23
|
+
font-size: modular-scale(2, $value: 1em);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&-double-value {
|
|
27
|
+
font-size: modular-scale(2, $value: 2em);
|
|
28
|
+
}
|
|
29
|
+
}
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
3
|
+
require "rspec"
|
|
4
|
+
require "bourbon"
|
|
5
|
+
require "aruba/api"
|
|
6
|
+
require "css_parser"
|
|
7
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
|
8
|
+
|
|
9
|
+
RSpec.configure do |config|
|
|
10
|
+
config.include SassSupport
|
|
11
|
+
config.include CssParser
|
|
12
|
+
config.include ParserSupport
|
|
13
|
+
config.include Aruba::Api
|
|
14
|
+
|
|
15
|
+
config.before(:all) do
|
|
16
|
+
generate_css
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
config.after(:all) do
|
|
20
|
+
clean_up
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
RSpec::Matchers.define :be_contained_in do |expected|
|
|
2
|
+
match do |actual|
|
|
3
|
+
@query = ParserSupport.parser.find_by_selector(actual, expected)
|
|
4
|
+
@query.any?
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
failure_message_for_should do |actual|
|
|
8
|
+
%{expected selector #{actual} to be container in #{expected}}
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
RSpec::Matchers.define :have_rule do |expected|
|
|
2
|
+
match do |selector|
|
|
3
|
+
@rules = rules_from_selector(selector)
|
|
4
|
+
@rules.include? expected
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
failure_message do |selector|
|
|
8
|
+
if @rules.empty?
|
|
9
|
+
%{no CSS for selector #{selector} were found}
|
|
10
|
+
else
|
|
11
|
+
rules = @rules.join("; ")
|
|
12
|
+
%{Expected selector #{selector} to have CSS rule "#{expected}".
|
|
13
|
+
Had "#{rules}".}
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def rules_from_selector(selector)
|
|
18
|
+
rulesets = ParserSupport.parser.find_by_selector(selector)
|
|
19
|
+
if rulesets.empty?
|
|
20
|
+
[]
|
|
21
|
+
else
|
|
22
|
+
rules(rulesets)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def rules(rulesets)
|
|
27
|
+
rules = []
|
|
28
|
+
rulesets.map do |ruleset|
|
|
29
|
+
ruleset.split(";").each do |rule|
|
|
30
|
+
rules << rule.strip
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
rules
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
RSpec::Matchers.define :have_value do |expected|
|
|
2
|
+
match do |variable|
|
|
3
|
+
selector_id = variable.sub("$", "#")
|
|
4
|
+
value_attribute = ParserSupport.parser.find_by_selector(selector_id)[0]
|
|
5
|
+
|
|
6
|
+
unless value_attribute.nil?
|
|
7
|
+
actual_value = value_attribute.split(':')[1].strip.sub(";", "")
|
|
8
|
+
actual_value == expected
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
failure_message_for_should do |variable_name|
|
|
13
|
+
%{expected variable #{variable_name} to have value "#{expected}"}
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module ParserSupport
|
|
2
|
+
def self.parser
|
|
3
|
+
@parser ||= CssParser::Parser.new
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def self.parse_file(identifier)
|
|
7
|
+
parser.load_file!("tmp/#{identifier}.css")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.show_contents(identifier)
|
|
11
|
+
css_file_contents = File.open("tmp/#{identifier}.css").read
|
|
12
|
+
css_file_contents.each_line do |line|
|
|
13
|
+
puts line
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|