// Bootstrap functions
//
// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.

// Ascending
// Used to evaluate Sass maps like our grid breakpoints.
_assert-ascending($map, $map-name)
  $prev-key = null
  $prev-num = null
  for $key, $num in $map
    if $prev-num == null
      // Do nothing
    else if !comparable($prev-num, $num)
      warn("Potentially invalid value for "+$map-name+": This map must be in ascending order, but key '"+$key+"' has value "+$num+" whose unit makes it incomparable to "+$prev-num+", the value of the previous key '"+$prev-key+"' !")
    else if $prev-num >= $num
      warn("Invalid value for "+$map-name+": This map must be in ascending order, but key '"+$key+"' has value "+$num+" which isn't greater than "+$prev-num+", the value of the previous key '"+$prev-key+"' !")
    $prev-key = $key
    $prev-num = $num


// Starts at zero
// Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0.
_assert-starts-at-zero($map)
  $values = values($map)
  $first-value = $values[0]
  if $first-value != 0
    warn("First breakpoint in `$grid-breakpoints` must start at 0, but starts at "+$first-value+".")


// Replace `$search` with `$replace` in `$string`
// Used on our SVG icon backgrounds for custom forms.
//
// @author Hugo Giraudel
// @param {String} $string - Initial string
// @param {String} $search - Substring to replace
// @param {String} $replace ('') - New value
// @return {String} - Updated string
str-replace($string, $search, $replace = "")
  $index = index($string, $search)
  if $index
    slice($string, 1, $index - 1) + $replace + replace(slice($string, $index + length($search)), $search, $replace)
  else
    $string
