11use std:: collections:: HashSet ;
22
3- use crate :: net:: { CssHandler , ImageHandler } ;
3+ use crate :: net:: CssHandler ;
44use crate :: node:: NodeSpecificData ;
5- use crate :: util:: ImageType ;
65use crate :: { Attribute , BaseDocument , ElementNodeData , NodeData , QualName , local_name, ns} ;
76use blitz_traits:: net:: Request ;
87use style:: invalidation:: element:: restyle_hints:: RestyleHint ;
@@ -84,6 +83,7 @@ impl DocumentMutator<'_> {
8483 let child_ids = std:: mem:: take ( & mut self . doc . nodes [ old_parent_id] . children ) ;
8584 self . maybe_push_style_node ( old_parent_id) ;
8685 self . append_children ( new_parent_id, & child_ids) ;
86+ self . maybe_load_image ( & child_ids) ;
8787 }
8888
8989 pub fn append_children ( & mut self , parent_id : usize , child_ids : & [ usize ] ) {
@@ -99,6 +99,7 @@ impl DocumentMutator<'_> {
9999 }
100100
101101 self . maybe_push_style_node ( parent_id) ;
102+ self . maybe_load_image ( child_ids) ;
102103 }
103104
104105 pub fn replace_node_with ( & mut self , anchor_node_id : usize , new_node_ids : & [ usize ] ) {
@@ -137,11 +138,13 @@ impl DocumentMutator<'_> {
137138 }
138139
139140 self . maybe_push_parent_style_node ( anchor_node_id) ;
141+ self . maybe_load_image ( new_node_ids) ;
140142 }
141143
142144 pub fn insert_nodes_before ( & mut self , anchor_node_id : usize , new_node_ids : & [ usize ] ) {
143145 self . doc . insert_before ( anchor_node_id, new_node_ids) ;
144146 self . maybe_push_parent_style_node ( anchor_node_id) ;
147+ self . maybe_load_image ( new_node_ids) ;
145148 }
146149
147150 pub fn remove_node_if_unparented ( & mut self , node_id : usize ) {
@@ -210,7 +213,7 @@ impl DocumentMutator<'_> {
210213 let tag = node. element_data ( ) . unwrap ( ) . name . local . as_ref ( ) ;
211214 match tag {
212215 "link" => self . load_linked_stylesheet ( id) ,
213- "img" => self . load_image ( id) ,
216+ // "img" => self.doc .load_image(id),
214217 "style" => {
215218 self . style_nodes . insert ( id) ;
216219 }
@@ -255,7 +258,8 @@ impl DocumentMutator<'_> {
255258 } ;
256259
257260 let attr = name. local . as_ref ( ) ;
258- let load_image = element. name . local == local_name ! ( "img" ) && attr == "src" ;
261+ let load_image =
262+ element. name . local == local_name ! ( "img" ) && ( attr == "src" || attr == "srcset" ) ;
259263
260264 if element. name . local == local_name ! ( "input" ) && attr == "checked" {
261265 set_input_checked_state ( element, value. to_string ( ) ) ;
@@ -284,7 +288,7 @@ impl DocumentMutator<'_> {
284288 }
285289
286290 if load_image {
287- self . load_image ( node_id) ;
291+ self . doc . load_image ( node_id) ;
288292 }
289293 }
290294
@@ -377,16 +381,16 @@ impl<'doc> DocumentMutator<'doc> {
377381 ) ;
378382 }
379383
380- fn load_image ( & mut self , target_id : usize ) {
381- let node = & self . doc . nodes [ target_id ] ;
382- if let Some ( raw_src ) = node . attr ( local_name ! ( "src" ) ) {
383- if !raw_src . is_empty ( ) {
384- let src = self . doc . resolve_url ( raw_src ) ;
385- self . doc . net_provider . fetch (
386- self . doc . id ( ) ,
387- Request :: get ( src ) ,
388- Box :: new ( ImageHandler :: new ( target_id , ImageType :: Image ) ) ,
389- ) ;
384+ fn is_img_node ( & self , node_id : usize ) -> bool {
385+ self . doc . nodes [ node_id ]
386+ . data
387+ . is_element_with_tag_name ( & local_name ! ( "img" ) )
388+ }
389+
390+ fn maybe_load_image ( & self , node_ids : & [ usize ] ) {
391+ for id in node_ids . iter ( ) {
392+ if self . is_img_node ( * id ) {
393+ self . doc . load_image ( * id ) ;
390394 }
391395 }
392396 }
0 commit comments