Sha256: 9fe4aead4c23f9e694c1d7e4f827df0a15142dcf69b47be8c932bd2a2f4d5cd8

Contents?: true

Size: 1.34 KB

Versions: 2

Compression:

Stored size: 1.34 KB

Contents

// Map Toolkit
// ===========

// Truncate List
// -------------
// - Return a list, truncated to a given length
@function 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 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 deep-set(
  $map,
  $keys,
  $value
) {
  $length: length($keys);
  $return: ();

  @for $i from 1 through $length {
    $n: 0 - $i;
    $level: truncate-list($keys, $length + $n);
    $level: deep-get($map, $level...);
    $merge: (nth($keys, $n): $value);
    $value: if($level, map-merge($level, $merge), $merge);
    $return: $value;
  }

  @return $return;
}

// Deep Has-Key
// ------------
// - Return true if a deep key exists
@function deep-has-key(
  $map,
  $keys...
) {
  $return: null;
  $break: false;

  @each $key in $keys {
    @if not $break {
      $return: map-has-key($map, $key);
    }

    @if $return {
      $map: map-get($map, $key);
    } @else {
      $break: true;
    }
  }

  @return $return;
}

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
susy-2.0.0.beta.3 sass/susy/language/shared/_maps.scss
susy-2.0.0.beta.2 sass/susy/language/shared/_maps.scss