1use sova_core::html::{inject, HtmlAnchor, HtmlInject};
4
5pub const DEVTOOLS_MARKER: &str = "<!-- sova_devtools -->";
6
7pub fn inject_body(html: &str, fragment: &str) -> Option<String> {
9 inject(
10 html,
11 &HtmlInject::new(HtmlAnchor::BeforeCloseBody, fragment)
12 .marker(DEVTOOLS_MARKER)
13 .skip_if_contains(&["id=\"sova-devtools\""]),
14 )
15}
16
17#[cfg(test)]
18mod tests {
19 use super::*;
20
21 #[test]
22 fn injects_before_body_close() {
23 let html = "<html><body><p>hi</p></body></html>";
24 let out = inject_body(html, "<div id=\"sova-devtools\"></div>").unwrap();
25 assert!(out.contains(DEVTOOLS_MARKER));
26 assert!(out.find("sova-devtools").unwrap() < out.find("</body>").unwrap());
27 }
28
29 #[test]
30 fn idempotent() {
31 let html = format!("<body>{DEVTOOLS_MARKER}</body>");
32 assert!(inject_body(&html, "<div></div>").is_none());
33 }
34}