{{- $destination := .Destination -}}
{{- $url := urls.Parse .Destination -}}

{{- $isRemote := $url.IsAbs -}}
{{- $isFragment := strings.HasPrefix .Destination "#" -}}

{{- if and (not $isRemote) (not $isFragment) -}}
  {{- $path := strings.TrimPrefix "./" $url.Path -}}
  {{- $path = strings.TrimSuffix ".md" $path -}}
  {{- $path = strings.TrimSuffix "/_index" $path -}}

  {{- with (.Page.GetPage $path) -}}
    {{- $destination = .RelPermalink -}}
  {{- else with (.Page.Resources.Get $path) -}}
    {{- $destination = .RelPermalink -}}
  {{- else with (resources.Get $path) -}}
    {{- $destination = .RelPermalink -}}
  {{- else -}}
    {{- $mode := .Page.Site.Params.BookPortableLinks -}}
    {{- $message := printf "Image reference '%s' not found in '%s'" .Destination .Page.RelPermalink -}}
    {{- if eq $mode "warning" -}}
    {{- warnf $message -}}
    {{- else if eq $mode "error" -}}
    {{- errorf $message -}}
    {{- end -}}
  {{- end -}}

  {{- with $url.RawQuery -}}
    {{- $destination = print $destination "?" . -}}
  {{- end -}}
  {{- with $url.Fragment -}}
    {{- $destination = print $destination "#" . -}}
  {{- end -}}
{{- end -}}
{{- return $destination -}}