sass-aleksi 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +44 -0
- data/lib/sass-aleksi.rb +31 -0
- data/stylesheets/_aleksi.scss +23 -0
- data/stylesheets/aleksi/_colors.scss +0 -0
- data/stylesheets/aleksi/_config.scss +11 -0
- data/stylesheets/aleksi/_general.scss +11 -0
- data/stylesheets/aleksi/_lengths.scss +8 -0
- data/stylesheets/aleksi/_lists.scss +16 -0
- data/stylesheets/aleksi/_maps.scss +21 -0
- data/stylesheets/aleksi/_math.scss +10 -0
- data/stylesheets/aleksi/_sides.scss +11 -0
- data/stylesheets/aleksi/config/_constants.scss +73 -0
- data/stylesheets/aleksi/general/_apply.scss +42 -0
- data/stylesheets/aleksi/general/_css-rule.scss +88 -0
- data/stylesheets/aleksi/general/_default-to.scss +35 -0
- data/stylesheets/aleksi/general/_is-of-type.scss +72 -0
- data/stylesheets/aleksi/general/_throw.scss +125 -0
- data/stylesheets/aleksi/lengths/_convert.scss +100 -0
- data/stylesheets/aleksi/lengths/_strip-unit.scss +37 -0
- data/stylesheets/aleksi/lists/_contained-in.scss +34 -0
- data/stylesheets/aleksi/lists/_depth.scss +46 -0
- data/stylesheets/aleksi/lists/_get-nth.scss +44 -0
- data/stylesheets/aleksi/lists/_is-list.scss +35 -0
- data/stylesheets/aleksi/lists/_list-filter.scss +48 -0
- data/stylesheets/aleksi/lists/_next.scss +47 -0
- data/stylesheets/aleksi/lists/_prepend.scss +40 -0
- data/stylesheets/aleksi/lists/_previous.scss +47 -0
- data/stylesheets/aleksi/lists/_set-list-separator.scss +173 -0
- data/stylesheets/aleksi/lists/_walk.scss +96 -0
- data/stylesheets/aleksi/lists/_wrap-in-list.scss +42 -0
- data/stylesheets/aleksi/maps/_debug-map.scss +39 -0
- data/stylesheets/aleksi/maps/_is-map.scss +31 -0
- data/stylesheets/aleksi/maps/_map-clean.scss +45 -0
- data/stylesheets/aleksi/maps/_map-depth.scss +46 -0
- data/stylesheets/aleksi/maps/_map-extend.scss +50 -0
- data/stylesheets/aleksi/maps/_map-filter.scss +84 -0
- data/stylesheets/aleksi/maps/_map-find.scss +95 -0
- data/stylesheets/aleksi/maps/_map-get-tuple.scss +33 -0
- data/stylesheets/aleksi/maps/_map-has-keys.scss +92 -0
- data/stylesheets/aleksi/maps/_map-merge-deep.scss +54 -0
- data/stylesheets/aleksi/maps/_map-select.scss +56 -0
- data/stylesheets/aleksi/maps/_map-sort.scss +125 -0
- data/stylesheets/aleksi/maps/_map-unique.scss +46 -0
- data/stylesheets/aleksi/maps/_map-walk.scss +79 -0
- data/stylesheets/aleksi/maps/_map-zip.scss +64 -0
- data/stylesheets/aleksi/math/_add.scss +66 -0
- data/stylesheets/aleksi/math/_divide.scss +66 -0
- data/stylesheets/aleksi/math/_multiply.scss +66 -0
- data/stylesheets/aleksi/math/_subtract.scss +66 -0
- data/stylesheets/aleksi/sides/_output-sides.scss +71 -0
- data/stylesheets/aleksi/sides/_reduce-sides.scss +74 -0
- data/stylesheets/aleksi/sides/_side-name.scss +48 -0
- data/stylesheets/aleksi/sides/_side-value.scss +83 -0
- data/stylesheets/aleksi/sides/_sides-shorthand.scss +64 -0
- data/stylesheets/aleksi/sides/_to-sides-list.scss +63 -0
- data/stylesheets/aleksi/sides/_to-sides-map.scss +57 -0
- metadata +199 -0
@@ -0,0 +1,66 @@
|
|
1
|
+
// =============================================================================
|
2
|
+
// =ALEKSI - SUBTRACT
|
3
|
+
// =============================================================================
|
4
|
+
////
|
5
|
+
//// @group aleksi-math
|
6
|
+
//// @author [Yoannis Jamar](http://yoannis.me)
|
7
|
+
|
8
|
+
@import "SassyLists";
|
9
|
+
@import "aleksi/general/throw";
|
10
|
+
@import "aleksi/general/is-of-type";
|
11
|
+
|
12
|
+
// =subtract( $terms... )
|
13
|
+
// -----------------------------------------------------------------------------
|
14
|
+
/// Calculates the difference between two or more numbers. Usefull when relying
|
15
|
+
/// on `call()`, `walk()` or `apply()` for mathematical operations.
|
16
|
+
/// **Note**: passing more then 2 arguments will subtract them successively.
|
17
|
+
/// **Note**: if one of the terms is not a number, it will return `null`.
|
18
|
+
///
|
19
|
+
/// @param {arglist} $terms... - The operators in the subtraction.
|
20
|
+
///
|
21
|
+
/// @return {number|null} - The difference resulting from subtracting `$terms`.
|
22
|
+
/// @throw Warning if one of the terms is not a number.
|
23
|
+
///
|
24
|
+
/// @example scss
|
25
|
+
/// $foo: subtract(10, 5);
|
26
|
+
/// // => 5
|
27
|
+
/// $bar: subtract(10, 'hello')
|
28
|
+
/// // => null
|
29
|
+
/// $baz: subtract(10 5, 3)
|
30
|
+
/// // => null
|
31
|
+
/// $wiz: subtract(10, 5, 3)
|
32
|
+
/// // => 2
|
33
|
+
///
|
34
|
+
/// @access public
|
35
|
+
/// @since 0.1.0
|
36
|
+
|
37
|
+
@function subtract( $terms... )
|
38
|
+
{
|
39
|
+
@if not sl-every($terms, 'is-of-type', 'number') {
|
40
|
+
@return throw-warning('subtract():: all $terms must be numbers — returning null.');
|
41
|
+
}
|
42
|
+
|
43
|
+
@if length($terms) < 2 {
|
44
|
+
@return thow-error('subtract():: wrong number of arguments, 1 instead of 2 or more.');
|
45
|
+
}
|
46
|
+
|
47
|
+
$diff: nth($terms, 1);
|
48
|
+
|
49
|
+
@each $term in sl-slice($terms, 2) {
|
50
|
+
$diff: $diff - $term;
|
51
|
+
}
|
52
|
+
|
53
|
+
@return $diff;
|
54
|
+
}
|
55
|
+
|
56
|
+
// =diff( $terms... )
|
57
|
+
// -----------------------------------------------------------------------------
|
58
|
+
/// @alias subtract
|
59
|
+
///
|
60
|
+
/// @access public
|
61
|
+
/// @since 0.1.0
|
62
|
+
|
63
|
+
@function diff( $terms... )
|
64
|
+
{
|
65
|
+
@return subtract($terms...);
|
66
|
+
}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
// =============================================================================
|
2
|
+
// =ALEKSI - SIDE-PROPERTY
|
3
|
+
// =============================================================================
|
4
|
+
|
5
|
+
@import "aleksi/config";
|
6
|
+
@import "aleksi/general/css-rule";
|
7
|
+
@import "aleksi/sides/side-value";
|
8
|
+
@import "aleksi/sides/reduce-sides";
|
9
|
+
|
10
|
+
// =output-sides( $property, $values[, $important ])
|
11
|
+
// -----------------------------------------------------------------------------
|
12
|
+
/// Output a CSS property for a side-list value. The keyword 'offset' is
|
13
|
+
/// accepted to output the 'top', 'right', 'bottom' and 'left'.
|
14
|
+
///
|
15
|
+
/// @param {property} $name - The CSS property name to output.
|
16
|
+
/// @param {list} $values - The sides-list describing the property's values.
|
17
|
+
/// @param {bool} $important [false] - Whether to add the '!imporant' flag.
|
18
|
+
///
|
19
|
+
/// @example scss - SCSS stylesheet
|
20
|
+
/// .foo {
|
21
|
+
/// position: absolute;
|
22
|
+
/// @include output-sides('offset', 10px null null 10px);
|
23
|
+
/// @include output-sides('margin', 10px null 1em);
|
24
|
+
/// @include output-sides('padding', 0.5em 5%);
|
25
|
+
/// }
|
26
|
+
///
|
27
|
+
/// @example css - CSS output
|
28
|
+
/// .foo {
|
29
|
+
/// position: absolute;
|
30
|
+
/// top: 10px;
|
31
|
+
/// left: 10px;
|
32
|
+
/// margin-top: 10px;
|
33
|
+
/// margin-bottom: 1em;
|
34
|
+
/// padding: 0.5em 5%;
|
35
|
+
/// }
|
36
|
+
///
|
37
|
+
/// @access public
|
38
|
+
/// @since 0.1.0
|
39
|
+
|
40
|
+
@mixin output-sides( $property, $values, $important: false )
|
41
|
+
{
|
42
|
+
// output separate property if setting offset or if one side
|
43
|
+
// should be omitted
|
44
|
+
@if $property == 'offset' or sl-contain($values, null) {
|
45
|
+
@each $side in const('CSS_SIDES') {
|
46
|
+
// append the side to the property name, or use the side only for offsets
|
47
|
+
$prop: if($property == 'offset', $side, '#{$property}-#{$side}');
|
48
|
+
// select the side's value from the list of values
|
49
|
+
$val: side-value($values, $side);
|
50
|
+
|
51
|
+
@include css-rule($prop, $val, $important);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
// output shorthand otherwise
|
56
|
+
@else {
|
57
|
+
@include css-rule($property, reduce-sides($values), $important);
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
// =sides( $property, $values[, $important ])
|
62
|
+
// -----------------------------------------------------------------------------
|
63
|
+
/// @alias output-sides
|
64
|
+
///
|
65
|
+
/// @access public
|
66
|
+
/// @since 0.1.0
|
67
|
+
|
68
|
+
@mixin sides( $property, $values, $important: false )
|
69
|
+
{
|
70
|
+
@include output-sides($property, $values, $important);
|
71
|
+
}
|
@@ -0,0 +1,74 @@
|
|
1
|
+
// =============================================================================
|
2
|
+
// =ALEKSI - REDUCE-SIDES-LIST
|
3
|
+
// =============================================================================
|
4
|
+
|
5
|
+
@import "SassyLists";
|
6
|
+
@import "aleksi/general/throw";
|
7
|
+
@import "aleksi/lists/get-nth";
|
8
|
+
|
9
|
+
// =reduce-sides-list( $list )
|
10
|
+
// -----------------------------------------------------------------------------
|
11
|
+
/// Reduces a sides-list to its most compact form.
|
12
|
+
///
|
13
|
+
/// @param {list} $list - The sides-list to reduce.
|
14
|
+
///
|
15
|
+
/// @return {list} - The reduced version of $list.
|
16
|
+
/// @throw Error if $list has more then 4 items.
|
17
|
+
///
|
18
|
+
/// @access public
|
19
|
+
/// @since 0.1.0
|
20
|
+
///
|
21
|
+
/// @todo Unit test the 'reduce-sides-list' function
|
22
|
+
|
23
|
+
@function reduce-sides-list( $list )
|
24
|
+
{
|
25
|
+
$l: length($list);
|
26
|
+
|
27
|
+
@if $l > 4 {
|
28
|
+
@return throw-error("reduce-sides-list():: $list #{inspect($list)} is not a valid sides-list. Sides-lists can only have 1 to 4 items.");
|
29
|
+
}
|
30
|
+
|
31
|
+
// OPTIMIZATION: single-items can't be reduces
|
32
|
+
@if $l == 1 {
|
33
|
+
@return $list;
|
34
|
+
}
|
35
|
+
|
36
|
+
// CAUTION: don't remove 3rd unless 4th can be removed as well,
|
37
|
+
// and don't remove 3rd unless 2nd can be removed as well otherwise
|
38
|
+
// values would be attributed to wrong sides.
|
39
|
+
$first: nth($list, 1);
|
40
|
+
$second: get-nth($list, 2);
|
41
|
+
$third: get-nth($list, 3);
|
42
|
+
$fourth: get-nth($list, 4);
|
43
|
+
|
44
|
+
@if $l == 4 {
|
45
|
+
@if $fourth == $second {
|
46
|
+
@return reduce-sides-list(sl-without($list, 4));
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
@else if $l == 3 {
|
51
|
+
@if $third == $first {
|
52
|
+
@return reduce-sides-list(sl-without($list, 3));
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
@else if $l == 2 {
|
57
|
+
@return if($second == $first, $first, $list);
|
58
|
+
}
|
59
|
+
|
60
|
+
// no items to remove
|
61
|
+
@return $list;
|
62
|
+
}
|
63
|
+
|
64
|
+
// =reduce-sides( $list )
|
65
|
+
// -----------------------------------------------------------------------------
|
66
|
+
/// @alias reduce-sides-list
|
67
|
+
///
|
68
|
+
/// @access public
|
69
|
+
/// @since 0.1.0
|
70
|
+
|
71
|
+
@function reduce-sides( $list )
|
72
|
+
{
|
73
|
+
@return reduce-sides-list( $list );
|
74
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
// =============================================================================
|
2
|
+
// =ALEKSI - SIDE-NAME
|
3
|
+
// =============================================================================
|
4
|
+
|
5
|
+
@import "aleksi/config";
|
6
|
+
@import "aleksi/config/constants";
|
7
|
+
@import "aleksi/general/throw";
|
8
|
+
|
9
|
+
// =side-name( $index )
|
10
|
+
// -----------------------------------------------------------------------------
|
11
|
+
/// Retreives the name of side corresponding to a given index in the ordered
|
12
|
+
/// list of CSS sides.
|
13
|
+
///
|
14
|
+
/// @param {number} $index - The index of the side to retreive.
|
15
|
+
///
|
16
|
+
/// @return {string} - The name of the CSS side corresponding to $index.
|
17
|
+
/// @throw Error if $index is not an integer
|
18
|
+
/// @throw Error if $index is out of scope.
|
19
|
+
///
|
20
|
+
/// @access public
|
21
|
+
/// @since 0.1.0
|
22
|
+
///
|
23
|
+
/// @todo Unit test the 'side-name' function
|
24
|
+
|
25
|
+
@function side-name( $index )
|
26
|
+
{
|
27
|
+
@if not is-int($index) {
|
28
|
+
@return throw-error('side-for-index():: $index must be an integer. Was #{inspect($index)}.');
|
29
|
+
}
|
30
|
+
|
31
|
+
@if $i > 4 {
|
32
|
+
@return throw-error('side-for-index():: $index #{inspect($index)} out of scope. Should be between 1 and 4.');
|
33
|
+
}
|
34
|
+
|
35
|
+
@return nth(const('CSS_SIDES'), $index);
|
36
|
+
}
|
37
|
+
|
38
|
+
// =nth-side( $index )
|
39
|
+
// -----------------------------------------------------------------------------
|
40
|
+
/// @alias side-name
|
41
|
+
///
|
42
|
+
/// @access public
|
43
|
+
/// @since 0.1.0
|
44
|
+
|
45
|
+
@function nth-side( $index )
|
46
|
+
{
|
47
|
+
@return side-name($index);
|
48
|
+
}
|
@@ -0,0 +1,83 @@
|
|
1
|
+
// =============================================================================
|
2
|
+
// =ALEKSI - SIDES-LIST
|
3
|
+
// =============================================================================
|
4
|
+
|
5
|
+
@import "SassyLists";
|
6
|
+
@import "aleksi/config";
|
7
|
+
@import "aleksi/config/constants";
|
8
|
+
@import "aleksi/general/throw";
|
9
|
+
@import "aleksi/maps/is-map";
|
10
|
+
|
11
|
+
// =get-side-value( $list, $side )
|
12
|
+
// -----------------------------------------------------------------------------
|
13
|
+
/// Retreives the value for the given side in a side-list.
|
14
|
+
/// **Note**: Caution, if passed a map, it will be considered a single value
|
15
|
+
/// inside a single item sides-list.
|
16
|
+
///
|
17
|
+
/// @param {list} $list - The side-list from which to fetch the value
|
18
|
+
/// @param {string} $side - The name of the side to retreive in $list
|
19
|
+
///
|
20
|
+
/// @return {any} - The value corresponding to the asked in $list
|
21
|
+
/// @throw Error if $side is not a valid side name.
|
22
|
+
///
|
23
|
+
/// @example scss
|
24
|
+
/// $foo: get-side-value(10px 2em, 'left');
|
25
|
+
/// // => 2em
|
26
|
+
/// $bar: get-side-value(10px 2em, 'top');
|
27
|
+
/// // => 10px
|
28
|
+
/// $baz: get-side-value(10px 2em 20%, 'bottom');
|
29
|
+
/// // => 20%
|
30
|
+
/// $wiz: get-side-value(10px, 'right');
|
31
|
+
/// // => 10px
|
32
|
+
///
|
33
|
+
/// @access public
|
34
|
+
/// @since 0.1.0
|
35
|
+
///
|
36
|
+
/// @todo Unit test the 'get-side-value' function.
|
37
|
+
|
38
|
+
@function get-side-value( $list, $side )
|
39
|
+
{
|
40
|
+
@if type-of($side) != string or (not sl-contain(const('CSS_SIDES'), $side)) {
|
41
|
+
@return throw-error("side-list-value():: $side must be either 'top', 'right', 'bottom' or 'left'. Was #{inspect($side)}.");
|
42
|
+
}
|
43
|
+
|
44
|
+
// consider maps as single values inside a single item sides-list
|
45
|
+
@if is-map($list) {
|
46
|
+
@return $list;
|
47
|
+
}
|
48
|
+
|
49
|
+
$l: length($list);
|
50
|
+
$first: nth($list, 1);
|
51
|
+
|
52
|
+
@if $side == 'top' {
|
53
|
+
@return $first;
|
54
|
+
}
|
55
|
+
|
56
|
+
@else if $side == 'right' {
|
57
|
+
@return if($l >= 2, nth($list, 2), $first);
|
58
|
+
}
|
59
|
+
|
60
|
+
@else if $side == 'bottom' {
|
61
|
+
@return if($l >= 3, nth($list, 3), $first);
|
62
|
+
}
|
63
|
+
|
64
|
+
@else if $side == 'left' {
|
65
|
+
@return if($l >= 4, nth($list, 4), if($l >= 2, nth($list, 2), $first));
|
66
|
+
}
|
67
|
+
|
68
|
+
@else {
|
69
|
+
@return throw-error('side-list-value():: $side is must be either');
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
// =side-value( $list, $side )
|
74
|
+
// -----------------------------------------------------------------------------
|
75
|
+
/// @alias get-side-value
|
76
|
+
///
|
77
|
+
/// @access public
|
78
|
+
/// @since 0.1.0
|
79
|
+
|
80
|
+
@function side-value( $list, $side )
|
81
|
+
{
|
82
|
+
@return get-side-value($list, $side);
|
83
|
+
}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
// =============================================================================
|
2
|
+
// =ALEKSI - SIDES-FOR-KEYWORD
|
3
|
+
// =============================================================================
|
4
|
+
|
5
|
+
// =sides-shorthand( $side, $value )
|
6
|
+
// -----------------------------------------------------------------------------
|
7
|
+
/// Converts a value into a shorthan sides-list based on a given keyword.
|
8
|
+
/// Recognized keywords are 'all', 'ends', 'sides', 'top', 'right', 'bottom' and
|
9
|
+
/// 'left'.
|
10
|
+
///
|
11
|
+
/// @param {string} $side - Keyword to use to create the shorthand sides-list
|
12
|
+
/// @param {any} $value - The value to set in the resulting shortand sides-list
|
13
|
+
///
|
14
|
+
/// @return {list} - Shorthand sides-list containing $value.
|
15
|
+
/// @throw Warning if $side is not a recognized sides-list keyword.
|
16
|
+
///
|
17
|
+
/// @example scss
|
18
|
+
/// $foo: sides-for-keyword('left', 10px);
|
19
|
+
/// // => null null null 10px
|
20
|
+
/// $bar: sides-for-keyword('all', 10px);
|
21
|
+
/// // => 10px
|
22
|
+
/// $baz: sides-for-keyword('ends', 10px);
|
23
|
+
/// // => 10px null
|
24
|
+
/// $wiz: sides-for-keyword('sides', 10px);
|
25
|
+
/// // => null 10px
|
26
|
+
///
|
27
|
+
/// @access public
|
28
|
+
/// @since 0.1.0
|
29
|
+
///
|
30
|
+
/// @todo Unit test the 'sides-shorthand' function
|
31
|
+
|
32
|
+
@function sides-shorthand( $side, $value )
|
33
|
+
{
|
34
|
+
@if $side == 'all' {
|
35
|
+
@return $value;
|
36
|
+
}
|
37
|
+
|
38
|
+
@else if $side == 'ends' {
|
39
|
+
@return $value null;
|
40
|
+
}
|
41
|
+
|
42
|
+
@else if $side == 'sides' {
|
43
|
+
@return null $value;
|
44
|
+
}
|
45
|
+
|
46
|
+
@else if $side == 'top' {
|
47
|
+
@return $value null null;
|
48
|
+
}
|
49
|
+
|
50
|
+
@else if $side == 'right' {
|
51
|
+
@return null $value null null;
|
52
|
+
}
|
53
|
+
|
54
|
+
@else if $side == 'bottom' {
|
55
|
+
@return null null $value;
|
56
|
+
}
|
57
|
+
|
58
|
+
@else if $side == 'left' {
|
59
|
+
@return null null null $value;
|
60
|
+
}
|
61
|
+
|
62
|
+
@return throw-error("sides-for-keyword():: keyword #{inspect($side)} is"
|
63
|
+
+ " not a recognized keyword for sides-lists. Returning `null`.");
|
64
|
+
}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
// =============================================================================
|
2
|
+
// =ALEKSI - TO-SIDES-LIST
|
3
|
+
// =============================================================================
|
4
|
+
|
5
|
+
@import "SassyLists";
|
6
|
+
@import "aleksi/config";
|
7
|
+
@import "aleksi/config/constants";
|
8
|
+
@import "aleksi/general/is-of-type";
|
9
|
+
@import "aleksi/general/throw";
|
10
|
+
@import "aleksi/lists/contained-in";
|
11
|
+
@import "aleksi/sides/reduce-sides";
|
12
|
+
|
13
|
+
// =sides-map-to-list( $map[, $reduce ])
|
14
|
+
// -----------------------------------------------------------------------------
|
15
|
+
/// Converts a map of side, value pairs into a sides-list, and optionally
|
16
|
+
/// reduces the result.
|
17
|
+
///
|
18
|
+
/// @param {map} $map - The map to convert into a sides-list
|
19
|
+
/// @param {bool} $reduce [false] - Whether to reduce the resulting sides-list
|
20
|
+
///
|
21
|
+
/// @return {list} - The sides-list with values found in $map, in correct order.
|
22
|
+
/// @throw Error if $map is not a map.
|
23
|
+
/// @throw Warning if $map does not define a key, value pair for every CSS side.
|
24
|
+
///
|
25
|
+
/// @example scss
|
26
|
+
/// $bar: sides-map-to-list('left': 2em, 'right': 2em, 'top': 10px, 'bottom': 5%);
|
27
|
+
/// // => 10px 2em 5% 2em
|
28
|
+
///
|
29
|
+
/// @access public
|
30
|
+
/// @since 0.1.0
|
31
|
+
///
|
32
|
+
/// @todo Unit test the 'sides-map-to-list' function.
|
33
|
+
|
34
|
+
@function sides-map-to-list( $map, $reduce: false )
|
35
|
+
{
|
36
|
+
$list: ();
|
37
|
+
|
38
|
+
@if not is-of-type($map, 'map') {
|
39
|
+
@return throw-error('sides-map-to-sides-list():: $map must be a map. Was #{inspect($map)}.');
|
40
|
+
}
|
41
|
+
|
42
|
+
@if not sl-some(map-keys($map), 'contained-in', const('CSS_SIDES')) {
|
43
|
+
@return throw-warnig('sides-map-to-sides-list():: $map does not contain any CSS side, value pair.');
|
44
|
+
}
|
45
|
+
|
46
|
+
@each $side in const('CSS_SIDES') {
|
47
|
+
$list: append($list, map-get($map, $side));
|
48
|
+
}
|
49
|
+
|
50
|
+
@return if($reduce, reduce-sides-list($list), $list);
|
51
|
+
}
|
52
|
+
|
53
|
+
// =to-sides-list( $map )
|
54
|
+
// -----------------------------------------------------------------------------
|
55
|
+
/// @alias sides-map-to-list
|
56
|
+
///
|
57
|
+
/// @access public
|
58
|
+
/// @since 0.1.0
|
59
|
+
|
60
|
+
@function to-sides-list( $map )
|
61
|
+
{
|
62
|
+
@return sides-map-to-list($map);
|
63
|
+
}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
// =============================================================================
|
2
|
+
// =ALEKSI - TO-SIDES-MAP
|
3
|
+
// =============================================================================
|
4
|
+
|
5
|
+
@import "sassy-maps";
|
6
|
+
@import "aleksi/config";
|
7
|
+
@import "aleksi/config/constants";
|
8
|
+
@import "aleksi/general/throw";
|
9
|
+
|
10
|
+
// =sides-list-to-map( $list )
|
11
|
+
// -----------------------------------------------------------------------------
|
12
|
+
/// Converts a given side-list to a map pairing each side with its corresponding
|
13
|
+
/// value. If the list has more then 4 items, it will ignore additional items.
|
14
|
+
/// **Note**: sides-maps can not be reduced, otherwise a `null` value could
|
15
|
+
/// falsely get attributed to a side by using `map-get()`.
|
16
|
+
///
|
17
|
+
/// @param {list} $name - The side-list to convert.
|
18
|
+
///
|
19
|
+
/// @return {map} - A map pairing each CSS side with the value found in $list.
|
20
|
+
/// @throw Warning If $list has more then 4 items.
|
21
|
+
///
|
22
|
+
/// @example scss
|
23
|
+
/// $foo: sides-list-to-map(10px 2em 5%);
|
24
|
+
/// // => ('top': 10px, 'right': 2em, 'bottom': 5%, 'left': 2em)
|
25
|
+
///
|
26
|
+
/// @access public
|
27
|
+
/// @since 0.1.0
|
28
|
+
///
|
29
|
+
/// @todo Unit test the 'sides-list-to-map' function.
|
30
|
+
|
31
|
+
@function sides-list-to-map( $list )
|
32
|
+
{
|
33
|
+
$l: length($list);
|
34
|
+
$map: ();
|
35
|
+
|
36
|
+
@if $l >= 4 {
|
37
|
+
$w: throw-warning('sides-list-to-map():: $list has more then 4 items. Items 5 and up are being ignored.');
|
38
|
+
}
|
39
|
+
|
40
|
+
@each $side in const('CSS_SIDES') {
|
41
|
+
$map: map-set($map, $side, side-value($list, $side));
|
42
|
+
}
|
43
|
+
|
44
|
+
@return $map;
|
45
|
+
}
|
46
|
+
|
47
|
+
// =to-sides-map( $list )
|
48
|
+
// -----------------------------------------------------------------------------
|
49
|
+
/// @alias sides-list-to-map
|
50
|
+
///
|
51
|
+
/// @access public
|
52
|
+
/// @since 0.1.0
|
53
|
+
|
54
|
+
@function to-sides-map( $list )
|
55
|
+
{
|
56
|
+
@return sides-list-to-map( $list );
|
57
|
+
}
|