feat: Add protect link against spam
This commit is contained in:
parent
542c1adaa5
commit
b3981e36b7
|
@ -0,0 +1,19 @@
|
||||||
|
const obfuscates = document.getElementsByClassName("obfuscate");
|
||||||
|
for (const element of obfuscates) {
|
||||||
|
const link = document.createElement("a");
|
||||||
|
const separators = element.dataset.separators;
|
||||||
|
const protocol = element.dataset.param1.split("").reverse().join("");
|
||||||
|
let url = protocol;
|
||||||
|
for (let i = 0; i < separators.length; i++) {
|
||||||
|
url += separators[i] + element.dataset["param" + (i+2)].split("").reverse().join("");
|
||||||
|
}
|
||||||
|
let text = element.dataset.param2.split("").reverse().join("");
|
||||||
|
for (let i = 1; i < separators.length; i++) {
|
||||||
|
text += separators[i] + element.dataset["param" + (i+2)].split("").reverse().join("");
|
||||||
|
}
|
||||||
|
link.innerText = url.replace(new RegExp(element.dataset.regex, 'i'), element.dataset.replace);
|
||||||
|
link.href = url;
|
||||||
|
link.rel = "nofollow";
|
||||||
|
element.parentElement.insertBefore(link, element);
|
||||||
|
}
|
||||||
|
while (obfuscates.length > 0) obfuscates[0].remove();
|
|
@ -0,0 +1,7 @@
|
||||||
|
.obfuscate:before
|
||||||
|
content: attr(data-param2)
|
||||||
|
unicode-bidi: bidi-override
|
||||||
|
direction: rtl
|
||||||
|
|
||||||
|
&.at
|
||||||
|
content: attr(data-param4) "\002E" attr(data-param3) "\0040" attr(data-param2)
|
|
@ -1,2 +1,3 @@
|
||||||
@import "./variables"
|
@import "./variables"
|
||||||
@import "./grid"
|
@import "./grid"
|
||||||
|
@import "./link"
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
{{/*
|
||||||
|
S'il n'y a pas de / dans l'url d'un lien alors on ajoute le path du répertoire
|
||||||
|
*/}}
|
||||||
|
{{ $isExternalLink := strings.HasPrefix .Destination "http" }}
|
||||||
|
{{ $isWebLink := or $isExternalLink (eq 0 (.Destination | strings.Count ":")) }}
|
||||||
|
{{ $isTelLink := strings.HasPrefix .Destination "tel:" }}
|
||||||
|
{{ $isMailtoLink := strings.HasPrefix .Destination "mailto:" }}
|
||||||
|
{{ $hasSlash := in .Destination "/" }}
|
||||||
|
{{- if $isWebLink -}}
|
||||||
|
{{ $link := cond (and $isWebLink (and (not $hasSlash) (not $isExternalLink))) (path.Join "/" .Page.Dir .Destination) .Destination }}
|
||||||
|
<a href="{{ $link | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if $isExternalLink }} target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>
|
||||||
|
{{- else -}}
|
||||||
|
{{- $separators := cond $isMailtoLink ":@." ":" -}}
|
||||||
|
{{- $regex := cond $isMailtoLink "[a-z]*:(.*)" "[a-z]*:([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})"}}
|
||||||
|
{{- $replace := cond $isMailtoLink "$1" "$1 $2 $3 $4 $5" -}}
|
||||||
|
{{- $string := .Destination -}}
|
||||||
|
{{- $params := slice -}}
|
||||||
|
|
||||||
|
{{- range split $separators "" }}
|
||||||
|
{{ $parts := split $string . }}
|
||||||
|
{{ $params = $params | append (index $parts 0) }}
|
||||||
|
{{ $string = index $parts 1 }}
|
||||||
|
{{ end }}
|
||||||
|
{{- $params = $params | append (string $string) -}}
|
||||||
|
<span
|
||||||
|
class="obfuscate{{ if $isMailtoLink }} at{{ end }}"
|
||||||
|
data-separators="{{ $separators }}"
|
||||||
|
{{ range $param_index, $param_value := $params }}
|
||||||
|
data-param{{add $param_index 1}}="{{ range $index := seq (sub (len $param_value) 1) 0}}{{ substr $param_value $index 1}}{{ end }}"
|
||||||
|
{{ end }}
|
||||||
|
data-regex="{{ $regex }}"
|
||||||
|
data-replace="{{ $replace }}"
|
||||||
|
>
|
||||||
|
</span>
|
||||||
|
{{- end -}}
|
||||||
|
|
Loading…
Reference in New Issue