diff --git a/src/misc/markdown.rs b/src/misc/markdown.rs
index 1ed58b0..eba1c08 100644
--- a/src/misc/markdown.rs
+++ b/src/misc/markdown.rs
@@ -428,6 +428,8 @@ fn hljs_replace<'a>(root: &'a AstNode<'a>, mermaid_str: &str) {
fn mail_obfuscation(html: &str) -> (String, bool) {
let modified = Arc::new(AtomicBool::new(false));
+ let data_attr = "title";
+
// Modify HTML for mails
let new_html = rewrite_str(
html,
@@ -441,8 +443,8 @@ fn mail_obfuscation(html: &str) -> (String, bool) {
let (before, after) = mail.split_once('@').unwrap();
// Preserve old data and add obfuscated mail address
- el.prepend("{before}(at){after}");
+ el.prepend(&format!("{before}(at){after}");
el.append(&modified_mail, ContentType::Html);
// Change href
@@ -462,12 +464,12 @@ fn mail_obfuscation(html: &str) -> (String, bool) {
&new_html,
RewriteStrSettings {
element_content_handlers: vec![element!(
- "a[href^='mailto:'] > span[data]",
+ &format!("a[href^='mailto:'] > span[{data_attr}]"),
|el| {
Ok(el.set_attribute(
- "data",
+ data_attr,
// Remove mails
- &el.get_attribute("data")
+ &el.get_attribute(data_attr)
.unwrap()
.split_whitespace()
.filter(|word| !word.contains('@'))
diff --git a/static/js/mail_obfuscation.js b/static/js/mail_obfuscation.js
index 9a81f1e..53cfdf1 100644
--- a/static/js/mail_obfuscation.js
+++ b/static/js/mail_obfuscation.js
@@ -1,18 +1,20 @@
window.addEventListener("load", () => {
Array.from(document.getElementsByClassName("at")).forEach((elem) => {
- const span = elem.parentElement;
+ const a = elem.parentElement;
+ const span = elem.previousElementSibling;
// Replace (at) by @
elem.outerHTML = "@";
- // Remove useless span
- const a = span.parentElement;
-
// Correct text
- const data = span.getAttribute("data");
- a.innerHTML = data.length > 0 ? data : span.textContent;
+ const data = span.getAttribute("title");
+ if (data.length > 0) {
+ a.innerHTML = data;
+ } else {
+ a.style = "hyphens: none;";
+ }
// Change link
- a.setAttribute("href", a.getAttribute("href").replace(" at ", "@"));
+ a.setAttribute("href", a.textContent);
});
});