https://github.com/sha-red/compass-mixins/tree/master/lib
extended with more sass frameworks and as django app.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
1.9 KiB
111 lines
1.9 KiB
// Map Functions |
|
// ============= |
|
|
|
|
|
// Truncate List |
|
// ------------- |
|
// - Return a list, truncated to a given length |
|
@function _susy-truncate-list( |
|
$list, |
|
$length |
|
) { |
|
$_return: (); |
|
|
|
@for $i from 1 through length($list) { |
|
$_return: if($i <= $length, append($_return, nth($list, $i)), $_return); |
|
} |
|
|
|
@return $_return; |
|
} |
|
|
|
|
|
// Deep Get |
|
// -------- |
|
// - Return a value deep in nested maps |
|
@function _susy-deep-get( |
|
$map, |
|
$keys... |
|
) { |
|
$_return: $map; |
|
|
|
@each $key in $keys { |
|
@if type-of($_return) == map { |
|
$_return: map-get($_return, $key); |
|
} |
|
} |
|
|
|
@return $_return; |
|
} |
|
|
|
|
|
// Deep Set |
|
// -------- |
|
// - Set a value deep in nested maps |
|
@function _susy-deep-set( |
|
$map, |
|
$keys-value... |
|
) { |
|
$_value: nth($keys-value, -1); |
|
$_keys: _susy-truncate-list($keys-value, length($keys-value) - 1); |
|
$_length: length($_keys); |
|
$_return: (); |
|
|
|
@for $i from 1 through $_length { |
|
$_n: 0 - $i; |
|
$_level: _susy-truncate-list($_keys, $_length + $_n); |
|
$_level: _susy-deep-get($map, $_level...); |
|
$_merge: nth($_keys, $_n); |
|
$_merge: ($_merge: $_value); |
|
$_return: if($_level, map-merge($_level, $_merge), $_merge); |
|
$_value: $_return; |
|
} |
|
|
|
@return $_return; |
|
} |
|
|
|
|
|
// Deep Merge |
|
// ---------- |
|
// Return 2 objects of any depth, merged |
|
@function _susy-deep-merge( |
|
$map1, |
|
$map2 |
|
) { |
|
|
|
@if type-of($map1) != map or type-of($map2) != map { |
|
$map1: $map2; |
|
} @else { |
|
@each $key, $value in $map2 { |
|
$_new: ($key: _susy_deep-merge(map-get($map1, $key), $value)); |
|
$map1: map-merge($map1, $_new); |
|
} |
|
} |
|
|
|
@return $map1; |
|
} |
|
|
|
|
|
// Deep Has-Key |
|
// ------------ |
|
// - Return true if a deep key exists |
|
@function _susy-deep-has-key( |
|
$map, |
|
$keys... |
|
) { |
|
$_return: null; |
|
$_stop: false; |
|
|
|
@each $key in $keys { |
|
@if not($_stop) { |
|
$_return: map-has-key($map, $key); |
|
} |
|
|
|
@if $_return { |
|
$map: map-get($map, $key); |
|
} @else { |
|
$_stop: true; |
|
} |
|
} |
|
|
|
@return $_return; |
|
}
|
|
|