diff --git a/mailboxes/folders-lib.pl b/mailboxes/folders-lib.pl index 55d4c197d..d2a8899c4 100755 --- a/mailboxes/folders-lib.pl +++ b/mailboxes/folders-lib.pl @@ -2798,17 +2798,32 @@ while($html =~ /^([\000-\377]*?)(<\s*img[^>]*src=('[^']*'|"[^"]*"|\S+)[^>]*>)([\ my ($before, $allimg, $img, $after) = ($1, $2, $3, $4); $img =~ s/^'(.*)'$/$1/ || $img =~ s/^"(.*)"$/$1/; push(@$urls, $img) if ($urls); - if ($dis == 0) { + if ($dis == 3) { + # Let server load it in async mode + my $imgid = substitute_pattern('[a-f0-9]{40}'); + my $imgcont = $allimg; + $imgcont =~ s/src=/data-presrc=/g; + $imgcont =~ s/\Q$img\E/$imgid/g; + $newhtml .= + "$before$imgcont"; + $masked_img++; + # Try switching to remote user to correctly + # set temporary directory for super-users + &switch_to_remote_user(); + # Save image URL reference + &write_file_contents(&tempname($imgid), $img); + } + elsif ($dis == 0) { # Don't harm image $newhtml .= $before.$allimg; } elsif ($dis == 1) { # Don't touch unless offsite if ($img =~ /^(http|https|ftp):/) { - $masked_img++; my $imgcont = $allimg; $imgcont =~ s/src=/data-nosrc=/g; $newhtml .= $before.$imgcont; + $masked_img++; } else { $newhtml .= $before.$allimg; @@ -2823,17 +2838,36 @@ while($html =~ /^([\000-\377]*?)(<\s*img[^>]*src=('[^']*'|"[^"]*"|\S+)[^>]*>)([\ $newhtml .= $html; if ($masked_img) { my $masked_img_style = - ""; + } + \@keyframes mail-iframe-spinner { + to { + transform: rotate(360deg); + } + } + .img-presrc { + animation: mail-iframe-spinner .4s linear infinite; + border-radius: 50%; + border: 1.5px solid #bbbbbb; + border-top-color: #000000; + box-sizing: border-box; + content: ''; + height: 12px; + width: 12px; + position: absolute; + } + img[data-presrc] + { + opacity: 0; + } + "; $masked_img_style =~ s/[\n\r\s]+/ /g; $masked_img_style = &trim($masked_img_style); if ($newhtml =~ /<\/body>/) { @@ -2864,6 +2898,8 @@ if ($body =~ /<\/body>/) { } $body = &trim("e_escape($body, '"')); # Email iframe stuff +my $webprefix = &get_webprefix(); +my $image_mode = int(defined($in{'images'}) ? $in{'images'} : $userconfig{'view_images'}); my $iframe_body = <