@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;
}

@function url-encode($string)
{
    $map: (
        "%": "%25",
        "<": "%3C",
        ">": "%3E",
        " ": "%20",
        "!": "%21",
        "*": "%2A",
        "'": "%27",
        '"': "%22",
        "(": "%28",
        ")": "%29",
        ";": "%3B",
        ":": "%3A",
        "@": "%40",
        "&": "%26",
        "=": "%3D",
        "+": "%2B",
        "$": "%24",
        ",": "%2C",
        "/": "%2F",
        "?": "%3F",
        "#": "%23",
        "[": "%5B",
        "]": "%5D"
    );

    $new: $string;

    @each $search, $replace in $map
    {
        $new: str-replace($new, $search, $replace);
    }

    @return $new;
}


@function svg-image-data-url( $image-name, $fill: null )
{
    $svg-code: map-get( $svg-images, $image-name );

    @if ($svg-code == null)
    {
        @error "Unrecognized svg image: #{$image-name}. Add image to $svg-images map in app/stylesheets/environment/variables/svg-images.scss";
    }

    @if ($fill != null)
    {
        $svg-code: str-replace($svg-code, '<svg ', '<svg fill="#{$fill}" ')
    }

    $url-encoded-string: url-encode($svg-code);
    @return url('data:image/svg+xml,#{$url-encoded-string}');
}
