{{- $defaultConfig := .Site.Data.config.default.widgets.breadcrumbs -}}
{{- $configData := ( or .Site.Data.config.widgets.breadcrumbs $defaultConfig ) -}}
{{- $lang := .Site.Language.Lang -}}
{{- $config := ( ( index $configData $lang ) | default $configData ) -}}
{{- define "breadcrumbs_add_parents" -}}
{{- .Scratch.Set "parent" .Page.Parent -}}
{{- if eq .Page.Kind "term" -}}
{{- .Scratch.Set "parent" ( .Page.Site.GetPage ( print "/" .Page.Data.Plural ) ) -}}
{{- end -}}
{{- $parent := ( .Scratch.Get "parent" ) -}}
{{- if $parent -}}
{{- if and ( ne $parent.Kind "home" ) ( not ( in .Config.excludeParents $parent.Type ) ) -}}
{{- .Scratch.Add "crumbs" $parent -}}
{{- end }}
{{ template "breadcrumbs_add_parents" ( dict "Config" .Config "Page" $parent "Scratch" .Scratch ) }}
{{- end -}}
{{- end -}}
{{- define "breadcrumbs" -}}
{{- $crumbs := ( .Scratch.Get "crumbs" ) -}}
{{- $length := len $crumbs -}}
{{- $separator := .Config.separator -}}
{{- end -}}
{{- $scratch := newScratch -}}
{{- $scratch.Set "crumbs" ( slice . ) -}}
{{- template "breadcrumbs_add_parents" ( dict "Config" $config "Page" . "Scratch" $scratch ) -}}
{{- if ne .Kind "home" -}}
{{- $scratch.Add "crumbs" .Site.Home -}}
{{- end -}}
{{- template "breadcrumbs" ( dict "Config" $config "Scratch" $scratch ) -}}