Add support for picture elements
This commit is contained in:
parent
625c529cf1
commit
d49e825777
2 changed files with 46 additions and 2 deletions
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "monolith"
|
name = "monolith"
|
||||||
version = "2.0.9"
|
version = "2.0.10"
|
||||||
authors = [
|
authors = [
|
||||||
"Sunshine <sunshine@uberspace.net>",
|
"Sunshine <sunshine@uberspace.net>",
|
||||||
"Mahdi Robatipoor <mahdi.robatipoor@gmil.com>",
|
"Mahdi Robatipoor <mahdi.robatipoor@gmil.com>",
|
||||||
|
|
46
src/html.rs
46
src/html.rs
|
@ -11,6 +11,7 @@ use html5ever::tendril::TendrilSink;
|
||||||
enum NodeMatch {
|
enum NodeMatch {
|
||||||
Icon,
|
Icon,
|
||||||
Image,
|
Image,
|
||||||
|
Source,
|
||||||
StyleSheet,
|
StyleSheet,
|
||||||
Anchor,
|
Anchor,
|
||||||
Script,
|
Script,
|
||||||
|
@ -50,6 +51,26 @@ const JS_DOM_EVENT_ATTRS: [&str; 21] = [
|
||||||
"onresize",
|
"onresize",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
fn get_parent_node_name(node: &Handle) -> String {
|
||||||
|
let parent = node.parent.take().clone();
|
||||||
|
let parent_node = parent.and_then(|node| node.upgrade()).unwrap();
|
||||||
|
|
||||||
|
match &parent_node.data {
|
||||||
|
NodeData::Document => {"".to_string()}
|
||||||
|
NodeData::Doctype { .. } => {"".to_string()}
|
||||||
|
NodeData::Text { .. } => {"".to_string()}
|
||||||
|
NodeData::Comment { .. } => {"".to_string()}
|
||||||
|
NodeData::Element {
|
||||||
|
ref name,
|
||||||
|
attrs: _,
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
name.local.as_ref().to_string()
|
||||||
|
}
|
||||||
|
NodeData::ProcessingInstruction { .. } => unreachable!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn walk_and_embed_assets(
|
pub fn walk_and_embed_assets(
|
||||||
url: &str,
|
url: &str,
|
||||||
node: &Handle,
|
node: &Handle,
|
||||||
|
@ -104,6 +125,7 @@ pub fn walk_and_embed_assets(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"img" => { found = NodeMatch::Image; }
|
"img" => { found = NodeMatch::Image; }
|
||||||
|
"source" => { found = NodeMatch::Source; }
|
||||||
"a" => { found = NodeMatch::Anchor; }
|
"a" => { found = NodeMatch::Anchor; }
|
||||||
"script" => { found = NodeMatch::Script; }
|
"script" => { found = NodeMatch::Script; }
|
||||||
"form" => { found = NodeMatch::Form; }
|
"form" => { found = NodeMatch::Form; }
|
||||||
|
@ -147,6 +169,28 @@ pub fn walk_and_embed_assets(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
NodeMatch::Source => {
|
||||||
|
for attr in attrs_mut.iter_mut() {
|
||||||
|
if &attr.name.local == "srcset" {
|
||||||
|
if get_parent_node_name(&node) == "picture" {
|
||||||
|
if opt_no_images {
|
||||||
|
attr.value.clear();
|
||||||
|
attr.value.push_slice(TRANSPARENT_PIXEL);
|
||||||
|
} else {
|
||||||
|
let srcset_full_url = resolve_url(&url, &attr.value.to_string());
|
||||||
|
let source_datauri = retrieve_asset(
|
||||||
|
&srcset_full_url.unwrap(),
|
||||||
|
true,
|
||||||
|
"",
|
||||||
|
opt_user_agent,
|
||||||
|
);
|
||||||
|
attr.value.clear();
|
||||||
|
attr.value.push_slice(source_datauri.unwrap().as_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
NodeMatch::Anchor => {
|
NodeMatch::Anchor => {
|
||||||
for attr in attrs_mut.iter_mut() {
|
for attr in attrs_mut.iter_mut() {
|
||||||
if &attr.name.local == "href" {
|
if &attr.name.local == "href" {
|
||||||
|
@ -265,7 +309,7 @@ pub fn walk_and_embed_assets(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeData::ProcessingInstruction { .. } => unreachable!(),
|
NodeData::ProcessingInstruction { .. } => unreachable!()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue