From d1d21bc68c69077d5e08dda99f71bab4a3baf2b4 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 2 Jun 2024 18:44:57 +0200 Subject: [PATCH] w3c compliance --- src/misc/markdown.rs | 12 +++++++----- static/js/mail_obfuscation.js | 16 +++++++++------- 2 files changed, 16 insertions(+), 12 deletions(-) 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); }); });