flint-gs 2.0.3 → 2.0.4
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/README.md +27 -24
- data/lib/flint.rb +4 -72
- data/lib/flint/functions.rb +97 -0
- data/lib/flint/version.rb +4 -0
- data/stylesheets/flint/functions/lib/_list-to-string.scss +16 -10
- data/stylesheets/flint/functions/lib/_string-to-list.scss +2 -2
- data/stylesheets/flint/functions/lib/_support-syntax-bem.scss +4 -4
- data/stylesheets/flint/mixins/lib/_main.scss +0 -2
- data/tests/bootcamp/_bootcamp.scss +46 -0
- data/tests/bootcamp/core/functions/_actual.scss +3 -0
- data/tests/bootcamp/core/functions/_error.scss +29 -0
- data/tests/bootcamp/core/functions/_expect.scss +6 -0
- data/tests/bootcamp/core/functions/_not-to.scss +5 -0
- data/tests/bootcamp/core/functions/_should.scss +6 -0
- data/tests/bootcamp/core/functions/_to.scss +5 -0
- data/tests/bootcamp/core/mixins/_describe.scss +31 -0
- data/tests/bootcamp/core/mixins/_it.scss +31 -0
- data/tests/bootcamp/core/mixins/_runner.scss +28 -0
- data/tests/bootcamp/core/mixins/_should.scss +46 -0
- data/tests/bootcamp/core/mixins/_xdescribe.scss +9 -0
- data/tests/bootcamp/core/mixins/_xit.scss +9 -0
- data/tests/bootcamp/core/variables/_helpers.scss +5 -0
- data/tests/bootcamp/core/variables/_settings.scss +2 -0
- data/tests/bootcamp/core/variables/_should.scss +6 -0
- data/tests/bootcamp/core/variables/_trackers.scss +6 -0
- data/tests/bootcamp/lib/_sassyjson.scss +1075 -0
- data/tests/bootcamp/matchers/_be.scss +3 -0
- data/tests/bootcamp/matchers/_equal.scss +3 -0
- data/tests/bootcamp/matchers/lists/_be-empty.scss +3 -0
- data/tests/bootcamp/matchers/lists/_be-longer-than.scss +3 -0
- data/tests/bootcamp/matchers/lists/_be-shorter-than.scss +3 -0
- data/tests/bootcamp/matchers/lists/_contain.scss +3 -0
- data/tests/bootcamp/matchers/lists/_deep-contain.scss +3 -0
- data/tests/bootcamp/matchers/lists/_deep-equal.scss +47 -0
- data/tests/bootcamp/matchers/lists/_have-length-of.scss +3 -0
- data/tests/bootcamp/matchers/numbers/_be-close-to.scss +12 -0
- data/tests/bootcamp/matchers/numbers/_be-greater-than.scss +12 -0
- data/tests/bootcamp/matchers/numbers/_be-less-than.scss +12 -0
- data/tests/bootcamp/matchers/types/_be-falsy.scss +3 -0
- data/tests/bootcamp/matchers/types/_be-null.scss +3 -0
- data/tests/bootcamp/matchers/types/_be-truthy.scss +3 -0
- data/tests/bootcamp/matchers/types/_have-type-of.scss +3 -0
- data/tests/bootcamp/utils/_contain.scss +15 -0
- data/tests/bootcamp/utils/_equal.scss +23 -0
- data/tests/bootcamp/utils/_list-join.scss +35 -0
- data/tests/bootcamp/utils/_power.scss +15 -0
- data/tests/config.rb +52 -0
- data/tests/input/functions/_functions.scss +48 -0
- data/tests/input/functions/helpers/_helpers.scss +416 -0
- data/tests/input/functions/lib/_calc-breakpoint.scss +62 -0
- data/tests/input/functions/lib/_calc-width.scss +195 -0
- data/tests/input/functions/lib/_exists.scss +30 -0
- data/tests/input/functions/lib/_fluid-width.scss +32 -0
- data/tests/input/functions/lib/_get-index.scss +31 -0
- data/tests/input/functions/lib/_get-instance-value.scss +72 -0
- data/tests/input/functions/lib/_get-value.scss +28 -0
- data/tests/input/functions/lib/_has-family-instance.scss +35 -0
- data/tests/input/functions/lib/_instance.scss +187 -0
- data/tests/input/functions/lib/_last.scss +18 -0
- data/tests/input/functions/lib/_list-to-string.scss +28 -0
- data/tests/input/functions/lib/_map-fetch.scss +34 -0
- data/tests/input/functions/lib/_next-index.scss +24 -0
- data/tests/input/functions/lib/_purge.scss +14 -0
- data/tests/input/functions/lib/_remove.scss +14 -0
- data/tests/input/functions/lib/_replace-substring.scss +14 -0
- data/tests/input/functions/lib/_replace.scss +14 -0
- data/tests/input/functions/lib/_steal-key.scss +19 -0
- data/tests/input/functions/lib/_steal-values.scss +16 -0
- data/tests/input/functions/lib/_string-to-list.scss +28 -0
- data/tests/input/functions/lib/_support-syntax-bem.scss +14 -0
- data/tests/input/functions/lib/_support-syntax.scss +21 -0
- data/tests/input/functions/lib/_types-in-list.scss +50 -0
- data/tests/input/functions/lib/_use-syntax.scss +14 -0
- data/tests/input/output.scss +243 -0
- data/tests/output/output.css +1900 -0
- data/tests/tests.html +110 -0
- metadata +170 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 972dad8929bdf7d5e6d125c9da7c2d4b2dd86d1b
|
4
|
+
data.tar.gz: 1b2a584bfc2a192ddde61af066822ef74cc9cb80
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29914803abf6c0e4dec89d76d1550776564fc6ef6a8219122d53e1e1d78a3464ea765894219636b7baeee207c1ff4d8ddc46b6d9602395ac2b0ee15ab62ec5ab
|
7
|
+
data.tar.gz: 9cc8360a92e548e24522bd5d382d2680f6b6b362070c6e7d85e0a0eca69fc3e12fd45f76096f87e26cd44e978187125f2c1a5c8658bc167420127dc3b7d06b3d
|
data/README.md
CHANGED
@@ -53,36 +53,39 @@ function parses the selector string (for example, `.block__element__element`) li
|
|
53
53
|
/**
|
54
54
|
* Parser to support BEM syntax
|
55
55
|
*
|
56
|
+
* @access private
|
57
|
+
*
|
56
58
|
* @param {List} $selectors - string of selectors to parse
|
57
59
|
*
|
58
60
|
* @return {List} - parsed list of selectors according to syntax
|
61
|
+
*
|
62
|
+
* @group Internal Functions
|
59
63
|
*/
|
60
64
|
@function flint-support-syntax-bem($selectors) {
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
65
|
+
// Clean up selector, remove double underscores for spaces
|
66
|
+
// add pseudo character to differentiate selectors
|
67
|
+
$selectors: flint-replace-substring(inspect(unquote($selectors)), "__", "/");
|
68
|
+
// Parse string back to list without pseudo character
|
69
|
+
$selectors: flint-string-to-list($selectors, "/");
|
70
|
+
// Define top-most parent of selector
|
71
|
+
$parent: nth($selectors, 1);
|
72
|
+
// Create new list of parsed selectors
|
73
|
+
$selector-list: ("#{$parent}",);
|
74
|
+
|
75
|
+
// Loop over each selector and build list of selectors
|
76
|
+
@each $selector in $selectors {
|
77
|
+
// Make sure current selector is not the parent
|
78
|
+
@if $selector != $parent {
|
79
|
+
// Save to selector list
|
80
|
+
$selector-list: append($selector-list, "#{$parent}__#{$selector}", "comma");
|
81
|
+
// Define new parent
|
82
|
+
$parent: "#{$parent}__#{$selector}";
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
// Return the list of parsed selectors
|
87
|
+
@return $selector-list;
|
84
88
|
}
|
85
|
-
|
86
89
|
```
|
87
90
|
|
88
91
|
This will be parsed into a list of selectors: `.block, .block__element, .block__element__element`. The list of selectors can then be used by the
|
data/lib/flint.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "sass"
|
2
|
+
require_relative "flint/version"
|
3
|
+
require_relative "flint/functions"
|
2
4
|
|
3
5
|
base_directory = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
4
6
|
flint_stylesheets_path = File.join(base_directory, 'stylesheets')
|
@@ -10,75 +12,5 @@ else
|
|
10
12
|
end
|
11
13
|
|
12
14
|
module Flint
|
13
|
-
|
14
|
-
DATE = "2014-10-02"
|
15
|
-
end
|
16
|
-
|
17
|
-
module Sass::Script::Functions
|
18
|
-
|
19
|
-
###
|
20
|
-
# Use ruby functions
|
21
|
-
#
|
22
|
-
# @return {Bool}
|
23
|
-
###
|
24
|
-
def flint_use_ruby()
|
25
|
-
Sass::Script::Bool.new(true)
|
26
|
-
end
|
27
|
-
|
28
|
-
###
|
29
|
-
# Fetch value from map
|
30
|
-
#
|
31
|
-
# @param {Map} map - map to fetch value from
|
32
|
-
# @param {ArgList} keys - list of keys to traverse
|
33
|
-
#
|
34
|
-
# @return {*}
|
35
|
-
###
|
36
|
-
def flint_ruby_map_fetch(map, *keys)
|
37
|
-
assert_type map, :Map, :map
|
38
|
-
result = map
|
39
|
-
keys.each {|key| result != nil ? result = result.to_h.fetch(key, nil) : break}
|
40
|
-
return result != nil ? result : Sass::Script::Bool.new(false)
|
41
|
-
end
|
42
|
-
declare :flint_ruby_map_fetch, :args => [:map, :keys], :var_args => true
|
43
|
-
|
44
|
-
###
|
45
|
-
# Turn string into a flat list
|
46
|
-
#
|
47
|
-
# @param {String} string - string to operate on
|
48
|
-
# @param {String} separator - item to find which separates substrings
|
49
|
-
# @param {String} ignore - removes remaining string beyond item
|
50
|
-
#
|
51
|
-
# @return {List}
|
52
|
-
###
|
53
|
-
def flint_ruby_string_to_list(string, separator, ignore)
|
54
|
-
assert_type string, :String, :string
|
55
|
-
assert_type separator, :String, :separator
|
56
|
-
assert_type ignore, :String, :ignore
|
57
|
-
# Remove everything after ignore, split with separator
|
58
|
-
items = string.value[/[^#{ignore}]+/].split(separator.value)
|
59
|
-
if items.count == 1
|
60
|
-
Sass::Script::String.new(items[0], :comma)
|
61
|
-
else
|
62
|
-
Sass::Script::List.new(items.map { |i| Sass::Script::String.new(i) }, :comma)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
declare :flint_ruby_string_to_list, :args => [:string, :separator, :ignore]
|
66
|
-
|
67
|
-
###
|
68
|
-
# Replace substring with string
|
69
|
-
#
|
70
|
-
# @param {String} string - string that contains substring
|
71
|
-
# @param {String} find - substring to replace
|
72
|
-
# @param {String} replace - new string to replace sub with
|
73
|
-
#
|
74
|
-
# @return {String}
|
75
|
-
###
|
76
|
-
def flint_ruby_replace_substring(string, find, replace)
|
77
|
-
assert_type string, :String, :string
|
78
|
-
assert_type find, :String, :find
|
79
|
-
assert_type replace, :String, :replace
|
80
|
-
Sass::Script::String.new(string.value.gsub(find.value, replace.value))
|
81
|
-
end
|
82
|
-
declare :flint_ruby_replace_substring, :args => [:string, :find, :replace]
|
83
|
-
|
15
|
+
Sass::Script::Functions.send(:include, Flint)
|
84
16
|
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module Flint
|
2
|
+
|
3
|
+
def self.declare(*args)
|
4
|
+
Sass::Script::Functions.declare(*args)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.map(hash)
|
8
|
+
Sass::Script::Value::Map.new(hash)
|
9
|
+
end
|
10
|
+
|
11
|
+
###
|
12
|
+
# Use ruby functions
|
13
|
+
#
|
14
|
+
# @return {Bool}
|
15
|
+
###
|
16
|
+
def flint_use_ruby()
|
17
|
+
Sass::Script::Bool.new(true)
|
18
|
+
end
|
19
|
+
|
20
|
+
###
|
21
|
+
# Fetch value from map
|
22
|
+
#
|
23
|
+
# @param {Map} map - map to fetch value from
|
24
|
+
# @param {ArgList} keys - list of keys to traverse
|
25
|
+
#
|
26
|
+
# @return {*}
|
27
|
+
###
|
28
|
+
def flint_ruby_map_fetch(map, *keys)
|
29
|
+
assert_type map, :Map, :map
|
30
|
+
result = map
|
31
|
+
keys.each { |key| result.nil? ? break : result = result.to_h.fetch(key, nil) }
|
32
|
+
unless result.nil?
|
33
|
+
result
|
34
|
+
else
|
35
|
+
Sass::Script::Bool.new(false)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
declare :flint_ruby_map_fetch, :args => [:map, :keys], :var_args => true
|
39
|
+
|
40
|
+
###
|
41
|
+
# Joins all elements of list with passed glue
|
42
|
+
#
|
43
|
+
# @param {List} list
|
44
|
+
# @param {String} glue
|
45
|
+
#
|
46
|
+
# @return {String}
|
47
|
+
###
|
48
|
+
def flint_ruby_list_to_string(list, glue)
|
49
|
+
assert_type list, :List, :list
|
50
|
+
assert_type glue, :String, :glue
|
51
|
+
arr = list.to_a.flatten.map { |item| item.value }
|
52
|
+
Sass::Script::String.new(arr.join(glue.value))
|
53
|
+
end
|
54
|
+
declare :flint_ruby_list_to_string, :args => [:list, :glue]
|
55
|
+
|
56
|
+
###
|
57
|
+
# Turn string into a flat list
|
58
|
+
#
|
59
|
+
# @param {String} string - string to operate on
|
60
|
+
# @param {String} separator - item to find which separates substrings
|
61
|
+
# @param {String} ignore - removes remaining string beyond item
|
62
|
+
#
|
63
|
+
# @return {List}
|
64
|
+
###
|
65
|
+
def flint_ruby_string_to_list(string, separator, ignore)
|
66
|
+
assert_type string, :String, :string
|
67
|
+
assert_type separator, :String, :separator
|
68
|
+
assert_type ignore, :String, :ignore
|
69
|
+
# Remove everything after ignore, split with separator
|
70
|
+
items = string.value[/[^#{ignore}]+/].split(separator.value)
|
71
|
+
if items.count == 1
|
72
|
+
Sass::Script::String.new(items[0], :comma)
|
73
|
+
else
|
74
|
+
Sass::Script::List.new(items.map { |i| Sass::Script::String.new(i) }, :comma)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
declare :flint_ruby_string_to_list, :args => [:string, :separator, :ignore]
|
78
|
+
|
79
|
+
###
|
80
|
+
# Replace substring with string
|
81
|
+
#
|
82
|
+
# @param {String} string - string that contains substring
|
83
|
+
# @param {String} find - substring to replace
|
84
|
+
# @param {String} replace - new string to replace sub with
|
85
|
+
#
|
86
|
+
# @return {String}
|
87
|
+
###
|
88
|
+
def flint_ruby_replace_substring(string, find, replace)
|
89
|
+
assert_type string, :String, :string
|
90
|
+
assert_type find, :String, :find
|
91
|
+
assert_type replace, :String, :replace
|
92
|
+
Sass::Script::String.new(string.value.gsub(find.value, replace.value))
|
93
|
+
end
|
94
|
+
declare :flint_ruby_replace_substring, :args => [:string, :find, :replace]
|
95
|
+
|
96
|
+
Sass::Script::Functions.send(:include, Flint)
|
97
|
+
end
|
@@ -14,18 +14,24 @@
|
|
14
14
|
* @group Internal Functions
|
15
15
|
*/
|
16
16
|
@function flint-list-to-string($list, $glue: "", $is-nested: false) {
|
17
|
-
$result: null;
|
18
|
-
$length: length($list);
|
19
17
|
|
20
|
-
|
21
|
-
|
18
|
+
// Use Ruby function if available
|
19
|
+
@if $flint__use-ruby-functions {
|
20
|
+
@return flint_ruby_list_to_string($list, $glue);
|
21
|
+
} @else {
|
22
|
+
$result: null;
|
23
|
+
$length: length($list);
|
22
24
|
|
23
|
-
@
|
24
|
-
$
|
25
|
-
|
26
|
-
|
25
|
+
@for $i from 1 through $length {
|
26
|
+
$n: nth($list, $i);
|
27
|
+
|
28
|
+
@if flint-is-list($n) {
|
29
|
+
$result: $result#{flint-list-to-string($n, $glue, true)};
|
30
|
+
} @else {
|
31
|
+
$result: if($i != length($list) or $is-nested, $result#{$n}#{$glue}, $result#{$n});
|
32
|
+
}
|
27
33
|
}
|
28
|
-
}
|
29
34
|
|
30
|
-
|
35
|
+
@return unquote($result);
|
36
|
+
}
|
31
37
|
}
|
@@ -80,13 +80,13 @@
|
|
80
80
|
$string-list: append($string-list, $matched-string, "comma");
|
81
81
|
|
82
82
|
// Finally, return comma separated list of selectors
|
83
|
-
@return $string-list;
|
83
|
+
@return flint-purge($string-list);
|
84
84
|
} @else {
|
85
85
|
|
86
86
|
// Else, just return the string as a single item list
|
87
87
|
$string-list: append($string-list, $string);
|
88
88
|
|
89
|
-
@return $string-list;
|
89
|
+
@return flint-purge($string-list);
|
90
90
|
}
|
91
91
|
}
|
92
92
|
} @else {
|
@@ -12,22 +12,22 @@
|
|
12
12
|
@function flint-support-syntax-bem($selectors) {
|
13
13
|
// Clean up selector, remove double underscores for spaces
|
14
14
|
// add pseudo character to differentiate selectors
|
15
|
-
$selectors: flint-replace-substring(inspect($selectors), "__", "/");
|
15
|
+
$selectors: flint-replace-substring(inspect(unquote($selectors)), "__", "/");
|
16
16
|
// Parse string back to list without pseudo character
|
17
17
|
$selectors: flint-string-to-list($selectors, "/");
|
18
18
|
// Define top-most parent of selector
|
19
19
|
$parent: nth($selectors, 1);
|
20
20
|
// Create new list of parsed selectors
|
21
|
-
$selector-list: ($parent);
|
21
|
+
$selector-list: ("#{$parent}",);
|
22
22
|
|
23
23
|
// Loop over each selector and build list of selectors
|
24
24
|
@each $selector in $selectors {
|
25
25
|
// Make sure current selector is not the parent
|
26
26
|
@if $selector != $parent {
|
27
27
|
// Save to selector list
|
28
|
-
$selector-list: append($selector-list,
|
28
|
+
$selector-list: append($selector-list, "#{$parent}__#{$selector}", "comma");
|
29
29
|
// Define new parent
|
30
|
-
$parent: $parent
|
30
|
+
$parent: "#{$parent}__#{$selector}";
|
31
31
|
}
|
32
32
|
}
|
33
33
|
|
@@ -274,8 +274,6 @@
|
|
274
274
|
* @param {String|Number} $context (null) - context value of span, or null for shorthand
|
275
275
|
* @param {String|List} $gutter (null) - alias for gutter modifier
|
276
276
|
*
|
277
|
-
* @content all content passed will be placed _underneath_ output so that it takes precedence.
|
278
|
-
*
|
279
277
|
* @throws error if list lengths do not match number of breakpoints (when using variable shorthands).
|
280
278
|
*
|
281
279
|
* ----
|
@@ -0,0 +1,46 @@
|
|
1
|
+
@import "lib/sassyjson";
|
2
|
+
|
3
|
+
@import "core/variables/settings";
|
4
|
+
|
5
|
+
@import "core/variables/helpers";
|
6
|
+
@import "core/variables/should";
|
7
|
+
@import "core/variables/trackers";
|
8
|
+
|
9
|
+
@import "core/mixins/describe";
|
10
|
+
@import "core/mixins/it";
|
11
|
+
@import "core/mixins/runner";
|
12
|
+
@import "core/mixins/should";
|
13
|
+
@import "core/mixins/xdescribe";
|
14
|
+
@import "core/mixins/xit";
|
15
|
+
|
16
|
+
@import "core/functions/actual";
|
17
|
+
@import "core/functions/error";
|
18
|
+
@import "core/functions/expect";
|
19
|
+
@import "core/functions/not-to";
|
20
|
+
@import "core/functions/should";
|
21
|
+
@import "core/functions/to";
|
22
|
+
|
23
|
+
@import "utils/contain";
|
24
|
+
@import "utils/equal";
|
25
|
+
@import "utils/list-join";
|
26
|
+
@import "utils/power";
|
27
|
+
|
28
|
+
@import "matchers/be";
|
29
|
+
@import "matchers/equal";
|
30
|
+
|
31
|
+
@import "matchers/lists/be-empty";
|
32
|
+
@import "matchers/lists/be-longer-than";
|
33
|
+
@import "matchers/lists/be-shorter-than";
|
34
|
+
@import "matchers/lists/contain";
|
35
|
+
@import "matchers/lists/deep-contain";
|
36
|
+
@import "matchers/lists/deep-equal";
|
37
|
+
@import "matchers/lists/have-length-of";
|
38
|
+
|
39
|
+
@import "matchers/numbers/be-close-to";
|
40
|
+
@import "matchers/numbers/be-greater-than";
|
41
|
+
@import "matchers/numbers/be-less-than";
|
42
|
+
|
43
|
+
@import "matchers/types/be-falsy";
|
44
|
+
@import "matchers/types/be-null";
|
45
|
+
@import "matchers/types/be-truthy";
|
46
|
+
@import "matchers/types/have-type-of";
|
@@ -0,0 +1,29 @@
|
|
1
|
+
@function error($type, $message) {
|
2
|
+
$title: null;
|
3
|
+
|
4
|
+
@if $type == "type" {
|
5
|
+
$title: "TYPE ERROR";
|
6
|
+
}
|
7
|
+
|
8
|
+
@else if $type == "warn" {
|
9
|
+
$title: "WARNING"
|
10
|
+
}
|
11
|
+
|
12
|
+
@else if $type == "dep" {
|
13
|
+
$title: "DEPRECATED"
|
14
|
+
}
|
15
|
+
|
16
|
+
@else if $type == "fatal" {
|
17
|
+
$bc-error: true !global;
|
18
|
+
$title: "FATAL ERROR";
|
19
|
+
}
|
20
|
+
|
21
|
+
@else {
|
22
|
+
$bc-error: true !global;
|
23
|
+
$title: "ERROR";
|
24
|
+
}
|
25
|
+
|
26
|
+
$bc-error-text: "!#{$title}! #{$message}." !global;
|
27
|
+
|
28
|
+
@return false;
|
29
|
+
}
|