//
// A partial implementation of the Ruby list functions from Compass:
// https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/functions/lists.rb
//


// compact is part of libsass

@function -compass-nth($list, $place) {
  // Yep, Sass-lists are 1-indexed.
  @if $place == "first" {
    $place: 1;
  }
  @if $place == "last" {
    $place: length($list);
  }
  @return nth($list, $place);
}

// compass_list can't be implemented in sass script

@function -compass-space-list($item1, $item2:null, $item3:null, $item4:null, $item5:null, $item6:null, $item7:null, $item8:null, $item9:null) {
  $items: ();
  // Support for polymorphism.
  @if type-of($item1) == 'list' {
    // Passing a single array of properties.
    $items: $item1;
  } @else {
    $items: $item1 $item2 $item3 $item4 $item5 $item6 $item7 $item8 $item9;
  }

  $full: first-value-of($items);

  @for $i from 2 through length($items) {
    $item: nth($items, $i);
    @if $item != null {
      $full: $full $item;
    }
  }

  @return $full;
}

@function -compass-list-size($list) {
  @return length($list);
}

@function -compass-slice($list, $start, $end: false) {
  @if $end == false {
    $end: length($list);
  }
  $full: nth($list, $start);
  @for $i from $start + 1 through $end {
    $full: $full, nth($list, $i);
  }
  @return $full;
}

@function reject($list, $reject1, $reject2:null, $reject3:null, $reject4:null, $reject5:null, $reject6:null, $reject7:null, $reject8:null, $reject9:null) {
  $rejects: $reject1, $reject2, $reject3, $reject4, $reject5, $reject6, $reject7, $reject8, $reject9;

  $full: false;
  @each $item in $list {
    @if index($rejects, $item) {}
    @else {
      @if $full {
        $full: $full, $item;
      }
      @else {
        $full: $item;
      }
    }
  }
  @return $full;
}

@function first-value-of($list) {
  @return nth($list, 1);
}

@function compact($vars...) {
  $separator: list-separator($vars);
  $list: ();
  @each $var in $vars {
      @if $var {
          $list: append($list, $var, $separator);
      }
  }
  @return $list;
}
