mirror of
https://github.com/swc-project/swc.git
synced 2024-11-28 02:29:04 +03:00
feat(html/minifier): Compress type
for style
and link
tags (#4424)
This commit is contained in:
parent
65ced1d524
commit
25a87f0000
@ -80,23 +80,41 @@ impl VisitMut for Minifier {
|
||||
n.visit_mut_children_with(self);
|
||||
|
||||
n.children.retain(|child| !matches!(child, Child::Comment(comment) if !self.is_conditional_comment(&comment.data)));
|
||||
|
||||
if n.tag_name.eq_str_ignore_ascii_case("script") {
|
||||
n.attributes.retain(|attribute| {
|
||||
!(attribute.namespace.is_none()
|
||||
&& attribute.prefix.is_none()
|
||||
&& attribute.name.eq_str_ignore_ascii_case("type")
|
||||
&& attribute
|
||||
.value
|
||||
.as_ref()
|
||||
.map(|v| {
|
||||
EXECUTABLE_SCRIPTS_MIME_TYPES
|
||||
.iter()
|
||||
.any(|mime| v.eq_str_ignore_ascii_case(mime))
|
||||
})
|
||||
.unwrap_or_default())
|
||||
})
|
||||
}
|
||||
n.attributes.retain(|attribute| match &*attribute.name {
|
||||
"type"
|
||||
if n.namespace == Namespace::HTML
|
||||
&& matches!(n.tag_name.as_ref(), "script")
|
||||
&& (attribute.value.is_some()
|
||||
&& attribute
|
||||
.value
|
||||
.as_ref()
|
||||
.map(|v| {
|
||||
EXECUTABLE_SCRIPTS_MIME_TYPES
|
||||
.iter()
|
||||
.any(|mime| v.eq_str_ignore_ascii_case(mime))
|
||||
})
|
||||
.unwrap_or_default()) =>
|
||||
{
|
||||
false
|
||||
}
|
||||
"type"
|
||||
if n.namespace == Namespace::HTML
|
||||
&& matches!(n.tag_name.as_ref(), "style" | "link")
|
||||
&& (attribute.value.is_some()
|
||||
&& matches!(
|
||||
attribute
|
||||
.value
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.to_ascii_lowercase()
|
||||
.trim(),
|
||||
"text/css"
|
||||
)) =>
|
||||
{
|
||||
false
|
||||
}
|
||||
_ => true,
|
||||
});
|
||||
}
|
||||
|
||||
fn visit_mut_attribute(&mut self, n: &mut Attribute) {
|
||||
|
@ -0,0 +1,15 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Document</title>
|
||||
<link rel="stylesheet" href="a.css">
|
||||
<link rel="stylesheet" href="b.css" type="text/css">
|
||||
<link rel="stylesheet" href="b.css" type="TEXT/CSS">
|
||||
<link rel="stylesheet" href="c.css" type=" text/css ">
|
||||
<link rel="stylesheet" href="d.css" type="">
|
||||
<link rel="stylesheet" href="d.css" type="unknown/unknown">
|
||||
</head>
|
||||
<body>
|
||||
<div>test</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,13 @@
|
||||
<!DOCTYPE html><html lang=en><head>
|
||||
<title>Document</title>
|
||||
<link rel=stylesheet href=a.css>
|
||||
<link rel=stylesheet href=b.css>
|
||||
<link rel=stylesheet href=b.css>
|
||||
<link rel=stylesheet href=c.css>
|
||||
<link rel=stylesheet href=d.css type="">
|
||||
<link rel=stylesheet href=d.css type=unknown/unknown>
|
||||
</head>
|
||||
<body>
|
||||
<div>test</div>
|
||||
|
||||
</body></html>
|
@ -0,0 +1,33 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Document</title>
|
||||
<style>
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
<style type="text/css">
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
<style type="TEXT/CSS">
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
<style type=" ">
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
<style type=" text/css ">
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
<style type="unknown/unknown">
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html><html lang=en><head>
|
||||
<title>Document</title>
|
||||
<style>
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
<style>
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
<style>
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
<style type=" ">
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
<style>
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
<style type=unknown/unknown>
|
||||
h1 {color:red;}
|
||||
p {color:blue;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
</body></html>
|
Loading…
Reference in New Issue
Block a user