summaryrefslogtreecommitdiff
path: root/layouts/_default/_markup/render-link.html
diff options
context:
space:
mode:
Diffstat (limited to 'layouts/_default/_markup/render-link.html')
-rw-r--r--layouts/_default/_markup/render-link.html28
1 files changed, 28 insertions, 0 deletions
diff --git a/layouts/_default/_markup/render-link.html b/layouts/_default/_markup/render-link.html
new file mode 100644
index 0000000..48b419f
--- /dev/null
+++ b/layouts/_default/_markup/render-link.html
@@ -0,0 +1,28 @@
+{{ if .Page.Site.Params.BookPortableLinks }}
+ {{- template "portable-link" . -}}
+{{ else }}
+ <a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}>{{ .Text | safeHTML }}</a>
+{{ end }}
+
+{{- define "portable-link" -}}
+ {{- $destination := .Destination }}
+ {{- $isRemote := or (in .Destination "://") (strings.HasPrefix .Destination "//") }}
+ {{- if not $isRemote }}
+ {{- $url := urls.Parse .Destination }}
+ {{- $path := strings.TrimSuffix "/_index.md" $url.Path }}
+ {{- $path = strings.TrimSuffix "/_index" $path }}
+ {{- $path = strings.TrimSuffix ".md" $path }}
+ {{- $page := .Page.GetPage $path }}
+ {{- if $page }}
+ {{- $destination = $page.RelPermalink }}
+ {{- if $url.Fragment }}
+ {{- $destination = print $destination "#" $url.Fragment }}
+ {{- end }}
+ {{- else if fileExists (print .Page.File.Dir .Destination) }}
+ <!-- Nothing -->
+ {{- else -}}
+ {{- warnf "Page '%s' not found in '%s'" .Destination .Page.File }}
+ {{- end }}
+ {{- end }}
+ <a href="{{ $destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}>{{ .Text | safeHTML }}</a>
+{{- end -}}