diff --git a/src/html.rs b/src/html.rs
index f867da9..e3c29ab 100644
--- a/src/html.rs
+++ b/src/html.rs
@@ -82,8 +82,6 @@ pub fn walk_and_embed_assets(
match name.local.as_ref() {
"link" => {
- let mut link_type: &str = "";
-
// Remove integrity attributes
let mut i = 0;
while i < attrs_mut.len() {
@@ -95,88 +93,102 @@ pub fn walk_and_embed_assets(
}
}
+ enum LinkType {
+ Icon,
+ Stylesheet,
+ Preload,
+ DnsPrefetch,
+ Unknown,
+ }
+
+ let mut link_type = LinkType::Unknown;
for attr in attrs_mut.iter_mut() {
if &attr.name.local == "rel" {
if is_icon(attr.value.as_ref()) {
- link_type = "icon";
+ link_type = LinkType::Icon;
break;
} else if attr.value.as_ref() == "stylesheet" {
- link_type = "stylesheet";
+ link_type = LinkType::Stylesheet;
break;
}
}
}
+ let link_type = link_type;
- if link_type == "icon" {
- for attr in attrs_mut.iter_mut() {
- if &attr.name.local == "href" {
- if opt_no_images {
- attr.value.clear();
- } else {
- let href_full_url =
- resolve_url(&url, attr.value.as_ref()).unwrap_or_default();
- let (favicon_dataurl, _) = retrieve_asset(
- cache,
- client,
- &href_full_url,
- true,
- "",
- opt_silent,
- )
- .unwrap_or_default();
- attr.value.clear();
- attr.value.push_slice(favicon_dataurl.as_str());
- }
- }
- }
- } else if link_type == "stylesheet" {
- for attr in attrs_mut.iter_mut() {
- if &attr.name.local == "href" {
- if opt_no_css {
- attr.value.clear();
- } else {
- let href_full_url =
- resolve_url(&url, &attr.value.as_ref()).unwrap_or_default();
- let replacement_text = match retrieve_asset(
- cache,
- client,
- &href_full_url,
- false,
- "text/css",
- opt_silent,
- ) {
- // On successful retrieval, traverse CSS
- Ok((css_data, _)) => resolve_css_imports(
+ match link_type {
+ LinkType::Icon => {
+ for attr in attrs_mut.iter_mut() {
+ if &attr.name.local == "href" {
+ if opt_no_images {
+ attr.value.clear();
+ } else {
+ let href_full_url = resolve_url(&url, attr.value.as_ref())
+ .unwrap_or_default();
+ let (favicon_dataurl, _) = retrieve_asset(
cache,
client,
- &css_data,
- true,
&href_full_url,
- opt_no_images,
+ true,
+ "",
opt_silent,
- ),
-
- // If a network error occured, warn
- Err(e) => {
- eprintln!("Warning: {}", e);
-
- // If failed to resolve, replace with absolute URL
- href_full_url
- }
- };
-
- attr.value.clear();
- attr.value.push_slice(&replacement_text);
+ )
+ .unwrap_or_default();
+ attr.value.clear();
+ attr.value.push_slice(favicon_dataurl.as_str());
+ }
}
}
}
- } else {
- for attr in attrs_mut.iter_mut() {
- if &attr.name.local == "href" {
- let href_full_url =
- resolve_url(&url, attr.value.as_ref()).unwrap_or_default();
- attr.value.clear();
- attr.value.push_slice(&href_full_url.as_str());
+ LinkType::Stylesheet => {
+ for attr in attrs_mut.iter_mut() {
+ if &attr.name.local == "href" {
+ if opt_no_css {
+ attr.value.clear();
+ } else {
+ let href_full_url = resolve_url(&url, &attr.value.as_ref())
+ .unwrap_or_default();
+ let replacement_text = match retrieve_asset(
+ cache,
+ client,
+ &href_full_url,
+ false,
+ "text/css",
+ opt_silent,
+ ) {
+ // On successful retrieval, traverse CSS
+ Ok((css_data, _)) => resolve_css_imports(
+ cache,
+ client,
+ &css_data,
+ true,
+ &href_full_url,
+ opt_no_images,
+ opt_silent,
+ ),
+
+ // If a network error occured, warn
+ Err(e) => {
+ eprintln!("Warning: {}", e);
+
+ // If failed to resolve, replace with absolute URL
+ href_full_url
+ }
+ };
+
+ attr.value.clear();
+ attr.value.push_slice(&replacement_text);
+ }
+ }
+ }
+ }
+ LinkType::Unknown => {
+ for attr in attrs_mut.iter_mut() {
+ if &attr.name.local == "href" {
+ let href_full_url =
+ resolve_url(&url, attr.value.as_ref()).unwrap_or_default();
+ attr.value.clear();
+ attr.value.push_slice(&href_full_url.as_str());
+ }
}
}
}