{{- $siteSourceUrl := site.Params.siteSourceUrl -}} {{- $submoduleLinks := site.Data.submodules -}} {{- $hostData := site.Data.hosts -}} {{- $scratch := .scratch -}} {{- $lines := .lines -}} {{- $scratch.Set "bestLength" -1 -}} {{- $scratch.Set "bestUrl" (printf "%s/code/%s" $siteSourceUrl .path) -}} {{- $scratch.Set "bestPath" "" -}} {{- $filePath := .path -}} {{- range $path, $url := $submoduleLinks -}} {{- $bestLength := $scratch.Get "bestLength" -}} {{- if and (le $bestLength (len $path)) (hasPrefix $filePath $path) -}} {{- $scratch.Set "bestLength" (len $path) -}} {{- $scratch.Set "bestPath" $path -}} {{- $scratch.Set "bestUrl" (printf "%s%s" $url (strings.TrimPrefix $path $filePath)) -}} {{- end -}} {{- end -}} {{- if .lines -}} {{- /* If the user provided a line range, see if we can tack it on to the end of the link. */ -}} {{- range $host, $data := $hostData -}} {{- if hasPrefix ($scratch.Get "bestUrl") $host -}} {{- with $data.linesSuffix -}} {{- $scratch.Add "bestUrl" (printf . (index $lines 0) (index $lines 1)) -}} {{- end -}} {{- end -}} {{- end -}} {{- end -}}