///|
pub(all) enum DecideAction {
Keep // leave alone
Drop // remove the element and its subtree
Unwrap // remove the tag but splice children up
Empty // keep the tag, remove the children
Escape // serialize the tag to its HTML-escaped text form
}///|
test "readme transform actions" {
let frag = @dom.fragment(children=[
@dom.element("script", children=[@dom.text("alert(1)")]),
@dom.element("font", children=[@dom.text("loud")]),
])
let out = @transform.apply_transforms(frag, [
@transform.TransformSpec::drop("script"),
@transform.TransformSpec::unwrap("font"),
])
inspect(
@ser.to_html(out, pretty=false),
content=(
#|loud
),
)
}///|
test "readme transform merge_attrs" {
let frag = @dom.fragment(children=[
@dom.element(
"a",
attrs={ "href": Some("https://example.com"), "rel": Some("nofollow") },
children=[@dom.text("link")],
),
])
let out = @transform.apply_transforms(frag, [
@transform.TransformSpec::merge_attrs("a", attr="rel", tokens=[
"noopener", "noreferrer",
]),
])
inspect(
@ser.to_html(out, pretty=false),
content=(
#|<a href="https://example.com" rel="nofollow noopener noreferrer">link</a>
),
)
}///|
test "readme transform stage" {
let frag = @dom.fragment(children=[
@dom.element("script", children=[@dom.text("evil")]),
@dom.comment(" tracking "),
@dom.element("p", children=[@dom.text("keep")]),
])
let cleanup = @transform.TransformSpec::stage([
@transform.TransformSpec::drop("script"),
@transform.TransformSpec::drop_comments(),
])
let out = @transform.apply_transforms(frag, [cleanup])
inspect(
@ser.to_html(out, pretty=false),
content=(
#|<p>keep</p>
),
)
}///|
test "readme transform enabled flag" {
let frag = @dom.fragment(children=[
@dom.element("script", children=[@dom.text("kept")]),
])
let out = @transform.apply_transforms(frag, [
@transform.TransformSpec::drop("script", enabled=false),
])
inspect(
@ser.to_html(out, pretty=false),
content=(
#|<script>kept</script>
),
)
}#deprecated("implicit derived-impl promotion; call the trait method directly")
fn DecideAction::equal(DecideAction, DecideAction) -> Bool#deprecated("implicit derived-impl promotion; call the trait method directly")
fn DecideAction::not_equal(x : DecideAction, y : DecideAction) -> Bool#deprecated("implicit derived-impl promotion; call the trait method directly")
fn DecideAction::to_repr(DecideAction) -> Reprfn TransformSpec::allow_style_attrs(selector : StringView, allowed_css_properties~ : Array[String], enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::allowlist_attrs(selector : StringView, allowed_attributes : Map[String, Array[String]], enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::collapse_whitespace(skip_tags? : Array[String], enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::decide(selector : StringView, callback : (Node) -> DecideAction, enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::drop(selector : StringView, enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::drop_attrs(selector : StringView, patterns : Array[String], enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::drop_comments(enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::drop_doctype(enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::drop_foreign_namespaces(enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::drop_url_attrs(selector : StringView, url_policy~ : UrlPolicy, enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::edit(selector : StringView, callback : (Node) -> Unit, enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::edit_attrs(selector : StringView, callback : (Node) -> Map[String, String?]?, enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::edit_document(callback : (Node) -> Unit, enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::empty(selector : StringView, enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::escape(selector : StringView, enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::linkify(config? : LinkifyConfig, skip_tags? : Array[String], enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::merge_attrs(tag : StringView, attr~ : StringView, tokens~ : Array[String], enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::prune_empty(selector : StringView, strip_whitespace? : Bool, enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::sanitize(policy? : SanitizationPolicy, enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::set_attrs(selector : StringView, attrs : Map[String, String?], enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::stage(transforms : Array[TransformSpec], enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecfn TransformSpec::unwrap(selector : StringView, enabled? : Bool, hook? : (Node) -> Unit, report? : (String, Node?) -> Unit) -> TransformSpecInstall
Download zipMoonBit HTML parser and sanitizer ported from JustHTML.
Dependencies