
@mixin iconUrl($collection,$name){
	$svg: map-get( $collection, $name);
	@if $ib-stroke-width != auto {
		$svg: stroke-width($svg,$ib-stroke-width);
	}
	$svg: url("data:image/svg+xml,#{$svg}");
	$svg: escape-svg($svg);
	--url: #{$svg};
}

@mixin icon( $collection, $name ){

	$collection_prefix: map-get( $collection, '__prefix');

	.#{$collection_prefix}-#{$name}{
		@include iconUrl($collection, $name);
	}
}

// escape-svg() and str-replace() from https://github.com/twbs/bootstrap

// Characters which are escaped by the escape-svg function
$escaped-characters: (
  ("<", "%3c"),
  (">", "%3e"),
  ("#", "%23"),
  ("(", "%28"),
  (")", "%29"),
) !default;


// 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
@function str-replace($string, $search, $replace: "") {
  $index: str-index($string, $search);

  @if $index {
    @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
  }

  @return $string;
}

// See https://codepen.io/kevinweber/pen/dXWoRw
//
// Requires the use of quotes around data URIs.

@function escape-svg($string) {
  @if str-index($string, "data:image/svg+xml") {
    @each $char, $encoded in $escaped-characters {
      // Do not escape the url brackets
      @if str-index($string, "url(") == 1 {
        $string: url("#{str-replace(str-slice($string, 6, -3), $char, $encoded)}");
      } @else {
        $string: str-replace($string, $char, $encoded);
      }
    }
  }

  @return $string;
}

// Change the stroke-width property of the svg
@function stroke-width($svg, $stroke_width ) {
	$index: str-index($svg, 'stroke-width=');

	@if $index {
		$new:		str-slice($svg, 0, $index+13 );
		$svg:		str-slice($svg, $index+14 );
		$index:		str-index($svg,'"');

		@return $new + $stroke_width + str_slice($svg,$index);
	}

	@return $svg;
}
