feat: Add protect link against spam
This commit is contained in:
		
							
								
								
									
										19
									
								
								assets/js/main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								assets/js/main.js
									
									
									
									
									
										Normal file
									
								
							@@ -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();
 | 
			
		||||
							
								
								
									
										7
									
								
								assets/styles/link.sass
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								assets/styles/link.sass
									
									
									
									
									
										Normal file
									
								
							@@ -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 "./grid"
 | 
			
		||||
@import "./link"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								layouts/_default/_markup/render-link.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								layouts/_default/_markup/render-link.html
									
									
									
									
									
										Normal file
									
								
							@@ -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 -}}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user