use std::collections::{HashMap, HashSet};
use std::sync::LazyLock;
use ammonia::Builder;
static SANITIZER: LazyLock<Builder<'static>> = LazyLock::new(|| {
let style_props: HashSet<&str> = [
"color",
"background-color",
"font-weight",
"font-style",
"text-decoration",
"text-decoration-line",
"text-align",
]
.into_iter()
.collect();
let allowed_classes: HashMap<&str, HashSet<&str>> = [
(
"div",
[
"markdown-alert",
"markdown-alert-note",
"markdown-alert-tip",
"markdown-alert-important",
"markdown-alert-warning",
"markdown-alert-caution",
]
.into_iter()
.collect(),
),
("p", ["markdown-alert-title"].into_iter().collect()),
("ul", ["contains-task-list"].into_iter().collect()),
("li", ["task-list-item"].into_iter().collect()),
("input", ["task-list-item-checkbox"].into_iter().collect()),
]
.into_iter()
.collect();
let mut builder = Builder::default();
builder
.add_tags(["input"])
.add_tag_attributes("input", ["type", "checked", "disabled"])
.add_tag_attributes("span", ["style"])
.add_tag_attributes("pre", ["style"])
.add_tag_attributes("code", ["style"])
.add_tag_attributes("th", ["align"])
.add_tag_attributes("td", ["align"])
.filter_style_properties(style_props)
.allowed_classes(allowed_classes);
builder
});
pub(crate) fn clean(html: &str) -> String {
SANITIZER.clean(html).to_string()
}