diff --git a/themes/42/assets/css/a.css b/themes/42/assets/css/a.css
index 54ee3565..eaa2fe6e 100644
--- a/themes/42/assets/css/a.css
+++ b/themes/42/assets/css/a.css
@@ -20,4 +20,12 @@
&:hover {
color: var(--color-link-dead-hover);
}
+}
+
+.problematic {
+ color: var(--color-link-problematic);
+
+ &:hover {
+ color: var(--color-link-dead-problematic);
+ }
}
\ No newline at end of file
diff --git a/themes/42/layouts/_markup/render-link.html b/themes/42/layouts/_markup/render-link.html
index e3255dff..2d82e86e 100644
--- a/themes/42/layouts/_markup/render-link.html
+++ b/themes/42/layouts/_markup/render-link.html
@@ -1,70 +1 @@
-{{- $isExternal := strings.HasPrefix .Destination "http" -}}
-{{- $parsed := urls.Parse .Destination -}}
-{{- $host := $parsed.Host -}}
-{{- $path := $parsed.Path -}}
-{{- $query := $parsed.RawQuery -}}
-{{- $page := .Page -}}
-{{- $site := $page.Site -}}
-{{- $aff := index $site.Data.affiliates.sites $host -}}
-{{- $isAffiliated := false -}}
-{{- $report := default (dict) (transform.Unmarshal (readFile "tools/cache/external_links.yaml")) -}}
-{{- $deadList := default (slice) (index $report "links") -}}
-{{- $entriesMap := default (dict) (index $report "entries") -}}
-{{- $cacheEntry := index $entriesMap .Destination -}}
-{{- $deadInfo := dict -}}
-{{- $isDeadLink := false -}}
-{{- with (first 1 (where $deadList "url" .Destination)) -}}
- {{- $deadInfo = index . 0 -}}
- {{- $isDeadLink = true -}}
-{{- end -}}
-{{- $newURL := .Destination -}}
-{{- if and $isExternal $aff -}}
-{{- $param := $aff.param -}}
-{{- $value := $aff.value -}}
-{{- $isAffiliated = true -}}
-{{- if $query -}}
-{{- $newURL = printf "%s://%s%s?%s&%s=%s" $parsed.Scheme $host $path $query $param $value -}}
-{{- else -}}
-{{- $newURL = printf "%s://%s%s?%s=%s" $parsed.Scheme $host $path $param $value -}}
-{{- end -}}
-{{- end -}}
-{{- $titlePrefix := cond $isAffiliated "Lien affiliƩ" (cond $isExternal "Lien externe" "") -}}
-{{- $classes := slice -}}
-{{- if $isExternal -}}
- {{- $classes = $classes | append "external" -}}
- {{- if $isAffiliated -}}
- {{- $classes = $classes | append "affiliated" -}}
- {{- end -}}
-{{- end -}}
-{{- if $isDeadLink -}}
- {{- $classes = $classes | append "dead" -}}
-{{- end -}}
-{{- $titleParts := slice -}}
-{{- with $titlePrefix -}}
- {{- $titleParts = $titleParts | append . -}}
-{{- end -}}
-{{- with .Title -}}
- {{- $titleParts = $titleParts | append . -}}
-{{- end -}}
-{{- if $isDeadLink -}}
- {{- $deadDetails := slice -}}
- {{- with (index $cacheEntry "checkedAt") -}}
- {{- $deadDetails = $deadDetails | append (printf "inaccessible depuis le %s" (time.Format "02/01/2006" (time .))) -}}
- {{- end -}}
- {{- with (index $cacheEntry "errorType") -}}
- {{- $deadDetails = $deadDetails | append (printf "raison %s" .) -}}
- {{- end -}}
- {{- with (index $deadInfo "status") -}}
- {{- $deadDetails = $deadDetails | append (printf "statut %v" .) -}}
- {{- end -}}
- {{- with $deadDetails -}}
- {{- $titleParts = $titleParts | append (printf "(%s)" (delimit . " ; ")) -}}
- {{- end -}}
-{{- end -}}
-{{- $titleValue := delimit $titleParts " - " -}}
-
- {{- .Text | safeHTML -}}
-
-{{- /* */ -}}
+{{- partial "render/link.html" . -}}
diff --git a/themes/42/layouts/_partials/page-links.html b/themes/42/layouts/_partials/page-links.html
index b3439a76..fbe4cdba 100644
--- a/themes/42/layouts/_partials/page-links.html
+++ b/themes/42/layouts/_partials/page-links.html
@@ -1,7 +1,15 @@
-{{ if .Params.links }}
+{{- $page := . -}}
+{{- with .Params.links }}
-{{ end }}
\ No newline at end of file
+{{- end }}
diff --git a/themes/42/layouts/_partials/render/link.html b/themes/42/layouts/_partials/render/link.html
new file mode 100644
index 00000000..75a47af8
--- /dev/null
+++ b/themes/42/layouts/_partials/render/link.html
@@ -0,0 +1,85 @@
+{{- $isExternal := strings.HasPrefix .Destination "http" -}}
+{{- $parsed := urls.Parse .Destination -}}
+{{- $host := $parsed.Host -}}
+{{- $path := $parsed.Path -}}
+{{- $query := $parsed.RawQuery -}}
+{{- $page := .Page -}}
+{{- $site := $page.Site -}}
+{{- $aff := index $site.Data.affiliates.sites $host -}}
+{{- $isAffiliated := false -}}
+{{- $report := default (dict) (transform.Unmarshal (readFile "tools/cache/external_links.yaml")) -}}
+{{- $deadList := default (slice) (index $report "links") -}}
+{{- $entriesMap := default (dict) (index $report "entries") -}}
+{{- $cacheEntry := index $entriesMap .Destination -}}
+{{- $deadInfo := dict -}}
+{{- $isDeadLink := false -}}
+{{- with (first 1 (where $deadList "url" .Destination)) -}}
+ {{- $deadInfo = index . 0 -}}
+ {{- $isDeadLink = true -}}
+{{- end -}}
+{{- $newURL := .Destination -}}
+{{- if and $isExternal $aff -}}
+ {{- $param := $aff.param -}}
+ {{- $value := $aff.value -}}
+ {{- $isAffiliated = true -}}
+ {{- if $query -}}
+ {{- $newURL = printf "%s://%s%s?%s&%s=%s" $parsed.Scheme $host $path $query $param $value -}}
+ {{- else -}}
+ {{- $newURL = printf "%s://%s%s?%s=%s" $parsed.Scheme $host $path $param $value -}}
+ {{- end -}}
+{{- end -}}
+{{- $titlePrefix := cond $isAffiliated "Lien affiliƩ" (cond $isExternal "Lien externe" "") -}}
+{{- $classes := slice -}}
+{{- if $isExternal -}}
+ {{- $classes = $classes | append "external" -}}
+ {{- if $isAffiliated -}}
+ {{- $classes = $classes | append "affiliated" -}}
+ {{- end -}}
+{{- end -}}
+{{- if $isDeadLink -}}
+ {{- $statusRaw := index $deadInfo "status" -}}
+ {{- $statusCode := "" -}}
+ {{- with $statusRaw -}}
+ {{- $statusCode = printf "%v" . -}}
+ {{- end -}}
+ {{- if eq $statusCode "404" -}}
+ {{- $classes = $classes | append "dead" -}}
+ {{- else if gt (len $statusCode) 0 -}}
+ {{- $classes = $classes | append "problematic" -}}
+ {{- else -}}
+ {{- $classes = $classes | append "dead" -}}
+ {{- end -}}
+{{- end -}}
+{{- $titleParts := slice -}}
+{{- with $titlePrefix -}}
+ {{- $titleParts = $titleParts | append . -}}
+{{- end -}}
+{{- with .Title -}}
+ {{- $titleParts = $titleParts | append . -}}
+{{- end -}}
+{{- if $isDeadLink -}}
+ {{- $deadDetails := slice -}}
+ {{- with (index $cacheEntry "checkedAt") -}}
+ {{- $deadDetails = $deadDetails | append (printf "inaccessible depuis le %s" (time.Format "02/01/2006" (time .))) -}}
+ {{- end -}}
+ {{- with (index $cacheEntry "errorType") -}}
+ {{- $deadDetails = $deadDetails | append (printf "raison %s" .) -}}
+ {{- end -}}
+ {{- with (index $deadInfo "status") -}}
+ {{- $deadDetails = $deadDetails | append (printf "statut %v" .) -}}
+ {{- end -}}
+ {{- with $deadDetails -}}
+ {{- $titleParts = $titleParts | append (printf "(%s)" (delimit . " ; ")) -}}
+ {{- end -}}
+{{- end -}}
+{{- $titleValue := delimit $titleParts " - " -}}
+{{- $relAttr := "" -}}
+{{- if $isExternal -}}
+ {{- $relAttr = "noreferrer noopener" -}}
+{{- end -}}
+
+ {{- .Text | safeHTML -}}
+
+{{- /* */ -}}
diff --git a/themes/default/assets/css/variables/aesthetics.css b/themes/default/assets/css/variables/aesthetics.css
index dcf36c2f..5a4d5c30 100644
--- a/themes/default/assets/css/variables/aesthetics.css
+++ b/themes/default/assets/css/variables/aesthetics.css
@@ -23,6 +23,8 @@
--color-link-affiliated-hover: var(--pink-300);
--color-link-dead: var(--red-500);
--color-link-dead-hover: var(--red-300);
+ --color-link-problematic: var(--amber-500);
+ --color-link-problematic-hover: var(--amber-300);
--color-keyword: var(--gray-500);
--color-keyword-hover: var(--gray-0);
--color-footer-link: var(--gray-500);