dom_query 0.29.0

HTML querying and manipulation with CSS selectors
Documentation
use html5ever::local_name;
use tendril::StrTendril;

use crate::node::TreeNode;

use super::super::ctx::FormatOpts;
use super::super::serializer::MDSerializer;
use super::super::text_utils::{push_md_url, push_normalized_text, push_title};

impl MDSerializer<'_> {
    pub(in crate::serializing::md) fn write_img(text: &mut String, img_node: &TreeNode) {
        let Some(el) = img_node.as_element() else {
            return;
        };

        let src = el
            .attr("src")
            .filter(|s| !s.trim().is_empty())
            .or_else(|| {
                el.attr("srcset").and_then(|s| {
                    s.split_ascii_whitespace()
                        .next()
                        .map(|u| u.trim_end_matches(','))
                        .filter(|u| !u.is_empty())
                        .map(StrTendril::from_slice)
                })
            })
            .or_else(|| el.attr("data-src").filter(|s| !s.trim().is_empty()));
        if let Some(src) = src {
            text.push_str("![");

            if let Some(alt) = el.attr_ref(local_name!("alt")) {
                push_normalized_text(text, alt, FormatOpts::new());
            }
            text.push(']');
            text.push('(');
            push_md_url(text, &src);
            if let Some(title) = el.attr_ref(local_name!("title")) {
                push_title(text, title);
            }
            text.push(')');
        }
    }
}