Ejemplo n.º 1
0
			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
					} );
				}
			} );
Ejemplo n.º 2
0
					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) {}
					});
Ejemplo n.º 3
0
/**
 * 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));
	});
}
Ejemplo n.º 4
0
      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 '';
      });