@@ -2,9 +2,8 @@ use std::collections::HashSet;
22use std:: ops:: { Deref , DerefMut } ;
33
44use crate :: document:: make_device;
5- use crate :: net:: { CssHandler , ImageHandler } ;
5+ use crate :: net:: CssHandler ;
66use crate :: node:: NodeSpecificData ;
7- use crate :: util:: ImageType ;
87use crate :: { Attribute , BaseDocument , ElementNodeData , NodeData , QualName , local_name, ns} ;
98use blitz_traits:: Viewport ;
109use blitz_traits:: net:: Request ;
@@ -90,6 +89,7 @@ impl DocumentMutator<'_> {
9089 let child_ids = std:: mem:: take ( & mut self . doc . nodes [ old_parent_id] . children ) ;
9190 self . maybe_record_node ( old_parent_id) ;
9291 self . append_children ( new_parent_id, & child_ids) ;
92+ self . maybe_load_image ( & child_ids) ;
9393 }
9494
9595 pub fn append_children ( & mut self , parent_id : usize , child_ids : & [ usize ] ) {
@@ -105,6 +105,7 @@ impl DocumentMutator<'_> {
105105 }
106106
107107 self . maybe_record_node ( parent_id) ;
108+ self . maybe_load_image ( child_ids) ;
108109 }
109110
110111 pub fn replace_node_with ( & mut self , anchor_node_id : usize , new_node_ids : & [ usize ] ) {
@@ -143,11 +144,13 @@ impl DocumentMutator<'_> {
143144 }
144145
145146 self . maybe_record_parent_node ( anchor_node_id) ;
147+ self . maybe_load_image ( new_node_ids) ;
146148 }
147149
148150 pub fn insert_nodes_before ( & mut self , anchor_node_id : usize , new_node_ids : & [ usize ] ) {
149151 self . doc . insert_before ( anchor_node_id, new_node_ids) ;
150152 self . maybe_record_parent_node ( anchor_node_id) ;
153+ self . maybe_load_image ( new_node_ids) ;
151154 }
152155
153156 pub fn remove_node_if_unparented ( & mut self , node_id : usize ) {
@@ -217,7 +220,7 @@ impl DocumentMutator<'_> {
217220 match tag {
218221 "title" => self . title_node = Some ( id) ,
219222 "link" => self . load_linked_stylesheet ( id) ,
220- "img" => self . load_image ( id) ,
223+ // "img" => self.doc .load_image(id),
221224 "style" => {
222225 self . style_nodes . insert ( id) ;
223226 }
@@ -262,7 +265,8 @@ impl DocumentMutator<'_> {
262265 } ;
263266
264267 let attr = name. local . as_ref ( ) ;
265- let load_image = element. name . local == local_name ! ( "img" ) && attr == "src" ;
268+ let load_image =
269+ element. name . local == local_name ! ( "img" ) && ( attr == "src" || attr == "srcset" ) ;
266270
267271 if element. name . local == local_name ! ( "input" ) && attr == "checked" {
268272 set_input_checked_state ( element, value. to_string ( ) ) ;
@@ -291,7 +295,7 @@ impl DocumentMutator<'_> {
291295 }
292296
293297 if load_image {
294- self . load_image ( node_id) ;
298+ self . doc . load_image ( node_id) ;
295299 }
296300 }
297301
@@ -397,16 +401,16 @@ impl<'doc> DocumentMutator<'doc> {
397401 ) ;
398402 }
399403
400- fn load_image ( & mut self , target_id : usize ) {
401- let node = & self . doc . nodes [ target_id ] ;
402- if let Some ( raw_src ) = node . attr ( local_name ! ( "src" ) ) {
403- if !raw_src . is_empty ( ) {
404- let src = self . doc . resolve_url ( raw_src ) ;
405- self . doc . net_provider . fetch (
406- self . doc . id ( ) ,
407- Request :: get ( src ) ,
408- Box :: new ( ImageHandler :: new ( target_id , ImageType :: Image ) ) ,
409- ) ;
404+ fn is_img_node ( & self , node_id : usize ) -> bool {
405+ self . doc . nodes [ node_id ]
406+ . data
407+ . is_element_with_tag_name ( & local_name ! ( "img" ) )
408+ }
409+
410+ fn maybe_load_image ( & self , node_ids : & [ usize ] ) {
411+ for id in node_ids . iter ( ) {
412+ if self . is_img_node ( * id ) {
413+ self . doc . load_image ( * id ) ;
410414 }
411415 }
412416 }
0 commit comments