39 lines
1.3 KiB
HTML
39 lines
1.3 KiB
HTML
|
{{ $email := .Get 0 }}
|
||
|
{{ $parts := split $email "@" }}
|
||
|
{{ $name := index $parts 0 | base64Encode }}
|
||
|
{{ $domainParts := split (index $parts 1) "." }}
|
||
|
{{ $domain := delimit (first (sub (len $domainParts) 1) $domainParts) "." | base64Encode }}
|
||
|
{{ $tld := index $domainParts (sub (len $domainParts) 1) | base64Encode }}
|
||
|
|
||
|
<a href="#" class="protected-email"
|
||
|
data-name="{{ $name }}"
|
||
|
data-domain="{{ $domain }}"
|
||
|
data-tld="{{ $tld }}"
|
||
|
onclick="decodeEmail(this);return false;">
|
||
|
Click to reveal email
|
||
|
</a>
|
||
|
|
||
|
{{ if not (.Page.Scratch.Get "protectedEmailJS") }}
|
||
|
{{ .Page.Scratch.Set "protectedEmailJS" true }}
|
||
|
<script>
|
||
|
function decodeEmail(element) {
|
||
|
const name = atob(element.getAttribute('data-name'));
|
||
|
const domain = atob(element.getAttribute('data-domain'));
|
||
|
const tld = atob(element.getAttribute('data-tld'));
|
||
|
|
||
|
const email = name + '@' + domain + '.' + tld;
|
||
|
element.href = 'mailto:' + email;
|
||
|
element.textContent = email;
|
||
|
|
||
|
// Remove the onclick attribute to prevent further obfuscation
|
||
|
element.onclick = null;
|
||
|
}
|
||
|
|
||
|
// Initialize all protected email links
|
||
|
document.addEventListener('DOMContentLoaded', function() {
|
||
|
document.querySelectorAll('.protected-email').forEach(function(link) {
|
||
|
link.style.cursor = 'pointer';
|
||
|
});
|
||
|
});
|
||
|
</script>
|
||
|
{{ end }}
|