forEach( images, function( image ) { let imgSource = image.getAttribute( 'src' ), parsedImgSrc = url.parse( imgSource, false, true ), hostName = parsedImgSrc.hostname; let safeSource; // if imgSource is relative, prepend post domain so it isn't relative to calypso if ( ! hostName ) { imgSource = url.resolve( post.URL, imgSource ); parsedImgSrc = url.parse( imgSource, false, true ); } safeSource = safeImageURL( imgSource ); if ( ! safeSource && parsedImgSrc.search ) { // we can't make externals with a querystring safe. // try stripping it and retry parsedImgSrc.search = null; parsedImgSrc.query = null; safeSource = safeImageURL( url.format( parsedImgSrc ) ); } removeUnsafeAttributes( image ); if ( ! safeSource || imageShouldBeRemovedFromContent( imgSource ) ) { image.parentNode.removeChild( image ); // fun fact: removing the node from the DOM will not prevent it from loading. You actually have to // change out the src to change what loads. The following is a 1x1 transparent gif as a data URL image.setAttribute( 'src', TRANSPARENT_GIF ); image.removeAttribute( 'srcset' ); return; } if ( maxWidth ) { safeSource = maxWidthPhotonishURL( safeSource, maxWidth ); } image.setAttribute( 'src', safeSource ); if ( image.hasAttribute( 'srcset' ) ) { const imgSrcSet = srcset.parse( image.getAttribute( 'srcset' ) ).map( imgSrc => { if ( ! url.parse( imgSrc.url, false, true ).hostname ) { imgSrc.url = url.resolve( post.URL, imgSrc.url ); } imgSrc.url = safeImageURL( imgSrc.url ); return imgSrc; } ); image.setAttribute( 'srcset', srcset.stringify( imgSrcSet ) ); } if ( isCandidateForContentImage( imgSource ) ) { content_images.push( { src: safeSource, original_src: imgSource, width: image.width, height: image.height } ); } } );
el.getAttribute(name, (value) => { try { if (name === 'srcset') { value = srcset.stringify(srcset.parse(value).map(src => (src.url = rewrite(src.url, req.baseUrl), src))); } else if (name === 'style') { value = value.replace(cssUrlPattern, ($0, $1, $2, $3) => { return `url("${rewrite($2 || $3, req.baseUrl)}")`; }); } else { value = rewrite(value, req.baseUrl); } el.setAttribute(name, value); } catch (e) {} });
/** * Download resources from <img srcset="..."> * @param context * @param {Resource} parentResource * @param {HtmlData} childResourceHtmlData * @returns {Promise} */ function loadImgSrcsetResource (context, parentResource, childResourceHtmlData) { var imgScrsetParts = srcset.parse(childResourceHtmlData.attributeValue); return Promise.mapSeries(imgScrsetParts, function loadImgSrcsetPart (imgScrsetPart) { var childResourceUrl = utils.getUrl(parentResource.getUrl(), imgScrsetPart.url); var childResource = parentResource.createChild(childResourceUrl); childResource.setHtmlData(childResourceHtmlData); return context.loadResource(childResource).then(function updateSrcsetPart (loadedResource) { if(loadedResource){ imgScrsetPart.url = loadedResource.getFilename(); } }); }).then(function updateSrcset () { return Promise.resolve(srcset.stringify(imgScrsetParts)); }); }
match = match.replace(/srcset=(['"])(.*?)\1/ig, (srcsetAll, _, srcsetInner) => { try { var parsedSrcset = srcset.parse(srcsetInner).sort((a, b) => { return a.density < b.density ? -1 : 1; }); var lastDensity = 1; for (var srcSetItem of parsedSrcset) { if (devicePixelRatio > lastDensity) { newSrc = srcSetItem.url; } if (devicePixelRatio <= srcSetItem.density) { break; } lastDensity = srcSetItem.density; } } catch (e) {} return ''; });