// 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): $_value); $_return: if($_level, map-merge($_level, $_merge), $_merge); $_value: $_return; } @return $_return; } // 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; }