// retina.scss
// A helper mixin for applying high-resolution background images (http://www.retinajs.com)

// Submitted by Nathan Crank
// nathancrank.com

// Updated by Gabriel R. Sezefredo
// gabriel.sezefredo.com.br

// Updated by John Newman
// github.com/jgnewman
// http://axial.agency


/**
 * Allows you to use retina images at various pixel densities.
 * Examples:
 *
 *   @include retina(/images/mypic.jpg, 2);
 *   @include retina(/images/mypic.jpg, 3, 100px 100px, left top no-repeat transparent);
 *
 * @param  {Value}  $path               The path to the file name minus extension.
 * @param  {Number} $cap:    2          The highest pixel density level images exist for.
 * @param  {Value}  $size:   auto auto  The intended width of the rendered image.
 * @param  {Value}  $extras: null       Any other `background` values to be added.
 */
@mixin retina($path, $cap: 2, $size: auto auto, $extras: null) {

  /*
   * Set a counter and get the length of the image path.
   */
  $position: -1;
  $strpath: '#{$path}';
  $length: str-length($strpath);

  /*
   * Loop ver the image path and figure out the
   * position of the dot where the extension begins.
   */
  @for $i from $length through $length - 10{
      @if $position == -1 {
          $char : str-slice($strpath, $i, $i);
          @if str-index($char, ".") == 1 {
              $position: $i;
          }
      }
  }

  /*
   * If we were able to figure out where the extension is,
   * slice the path into a base and an extension. Use that to
   * calculate urls for different density environments. Set
   * values for different environments.
   */
  @if $position != -1 {
    $ext: str-slice($strpath, $position + 1, $length);
    $base: str-slice($strpath, 1, $position - 1);
    $at1x_path: "#{$base}.#{$ext}";
    $at2x_path: "#{$base}@2x.#{$ext}";

    /*
     * Set a base background for 1x environments.
     */
    background: url("#{$at1x_path}") $extras;
    background-size: $size;

    /*
     * Create an @2x-ish media query.
     */
    @media all and (-webkit-min-device-pixel-ratio : 1.5),
           all and (-o-min-device-pixel-ratio: 3/2),
           all and (min--moz-device-pixel-ratio: 1.5),
           all and (min-device-pixel-ratio: 1.5) {
             background      : url("#{$at2x_path}") $extras;
             background-size : $size;
    }

    /*
     * Create media queries for all environments that the user has
     * provided images for.
     */
    @if $cap >= 2 {
      @for $env from 2 through $cap {
        $suffix: "@#{$env}x";
        @media (-webkit-min-device-pixel-ratio: $env),
               (min-resolution: $env * 96dpi) {
                 background      : url("#{$base}#{$suffix}.#{$ext}") $extras;
                 background-size : $size;
        }
      }
    }

  /*
   * If anything went wrong trying to separate the file from its
   * extension, set a background value without doing anything to it.
   */
  } @else {
    background: url("#{$path}") $extras;
    background-size: $size;
  }

}
