From 95f142fecaad38cb696dc9606b2b9fa615c1f084 Mon Sep 17 00:00:00 2001 From: A1lo Date: Wed, 22 Jan 2025 16:26:48 +0800 Subject: [PATCH] fix(html): trim the first empty line in `
` tag (#90)

* fix(html): trim the first empty line in `
` tag

* only trim start (#2)

---------

Co-authored-by: Florian Dieminger 
---
 crates/rari-doc/src/html/rewriter.rs | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/crates/rari-doc/src/html/rewriter.rs b/crates/rari-doc/src/html/rewriter.rs
index 7b62170d..14e63579 100644
--- a/crates/rari-doc/src/html/rewriter.rs
+++ b/crates/rari-doc/src/html/rewriter.rs
@@ -2,7 +2,7 @@ use std::borrow::Cow;
 use std::collections::HashSet;
 
 use lol_html::html_content::ContentType;
-use lol_html::{element, rewrite_str, HtmlRewriter, RewriteStrSettings, Settings};
+use lol_html::{element, rewrite_str, text, HtmlRewriter, RewriteStrSettings, Settings};
 use rari_md::ext::DELIM_START;
 use rari_md::node_card::NoteCard;
 use rari_types::fm_types::PageType;
@@ -48,6 +48,7 @@ pub fn post_process_html(
     ))?;
     let base_url = options.base_url(Some(&base));
     let data_issues = settings().data_issues;
+    let mut in_pre = false;
 
     let mut element_content_handlers = vec![
         element!("*[id]", |el| {
@@ -106,6 +107,18 @@ pub fn post_process_html(
             el.set_attribute("class", &class)?;
             Ok(())
         }),
+        text!("pre[class*=brush]", |text| {
+            // trim the first _empty_ line,
+            // fixes issue: https://github.com/mdn/yari/issues/12364
+            if !in_pre && text.as_str().starts_with('\n') {
+                text.as_mut_str().remove(0);
+            }
+            in_pre = true;
+            if text.last_in_text_node() {
+                in_pre = false;
+            }
+            Ok(())
+        }),
         element!("pre[class*=brush]", |el| {
             let class = el.get_attribute("class");
             let class = class.as_deref().unwrap_or_default();