示例#1
0
        public Dictionary <String, ResponsiveImage> CreateResponsiveImages()
        {
            String          mq         = "media query?";
            ResponsiveImage imgKitchen = new ResponsiveImage();

            imgKitchen.src = "/Images/kitchen.jpg";
            imgKitchen.alt = "Kitchen";
            imgKitchen.srcset.Add(new ResponsiveImageSrc("/Images/kitchen.jpg", mq));
            roomImages.Add("kitchen", imgKitchen);

            ResponsiveImage imgBath = new ResponsiveImage();

            imgBath.src = "/Images/bathroom.jpg";
            imgBath.alt = "Bathroom";
            imgBath.srcset.Add(new ResponsiveImageSrc("/Images/bathroom.jpg", mq));
            roomImages.Add("bathroom", imgBath);

            ResponsiveImage Outdoor = new ResponsiveImage();

            Outdoor.src = "/Images/outdoor.jpg";
            Outdoor.alt = "Laundry";
            Outdoor.srcset.Add(new ResponsiveImageSrc("/Images/outdoor.jpg", mq));
            roomImages.Add("outdoor", Outdoor);

            ResponsiveImage Laundry = new ResponsiveImage();

            Laundry.src = "/Images/laundry.jpg";
            Laundry.alt = "Laundry";
            Laundry.srcset.Add(new ResponsiveImageSrc("/Images/laundry.jpg", mq));
            roomImages.Add("laundry", Laundry);
            return(roomImages);
        }
        public ResponsiveImage Build(IPublishedContent image,
                                     string cropPrefix,
                                     string altText = null,
                                     ImageBreakpoints breakpoints = null,
                                     string imageClass            = null,
                                     string containerClass        = null,
                                     string cropSeparator         = StringConstants.Separators.Hyphen,
                                     int?width          = null,
                                     int?height         = null,
                                     bool includeRetina = true,
                                     bool enableWebP    = false,
                                     int?quality        = null)
        {
            var imageSources = BuildResponsiveImageSources(image, cropPrefix, breakpoints, cropSeparator, width, height, includeRetina, enableWebP, quality);

            if (!imageSources.HasAny())
            {
                return(null);
            }

            var model = new ResponsiveImage
            {
                ImageSources   = imageSources,
                ImageClass     = imageClass,
                ContainerClass = containerClass,
                AltText        = altText.HasValue() ? altText : image.Name
            };

            return(model);
        }
示例#3
0
        /// <summary>
        /// Returns CSS <c>@media</c> At-rule blocks.
        /// </summary>
        /// <param name="responsiveImage"><see cref="ResponsiveImage" /></param>
        /// <returns></returns>
        public static string ToCssMediaAtRules(this ResponsiveImage responsiveImage)
        {
            responsiveImage.EnsureResponsiveImage();

            var candidatesCollection = responsiveImage
                                       .Candidates
                                       .Select(i => $"background-image: url({i.ImageUri?.OriginalString});");

            if (!candidatesCollection.Any())
            {
                return(string.Empty);
            }

            var sizesCollection = responsiveImage
                                  .Sizes
                                  .Select(i => $"@media only screen and {i.MediaCondition}");

            if (!sizesCollection.Any())
            {
                return(string.Empty);
            }

            var stringCollection = sizesCollection
                                   .Zip(candidatesCollection, (media, background) => $@"
{media} {{{
    spacer}{background}
}}");

            return(string.Join(string.Empty,
                               new[] {
                $"/* {responsiveImage.Description ?? string.Empty} */"
            }.Concat(stringCollection)
                               ));
        }
示例#4
0
 static void EnsureResponsiveImage(this ResponsiveImage responsiveImage)
 {
     if (responsiveImage == null)
     {
         throw new ArgumentNullException(nameof(responsiveImage));
     }
 }
示例#5
0
        private bool TryGetImageUrl(ContentReference imageReference, string imageType, out string imageUrl)
        {
            if (ContentReference.IsNullOrEmpty(imageReference))
            {
                imageUrl = string.Empty;
                return(false);
            }

            var imagePath = UrlResolver.GetUrl(imageReference);

            if (imagePath.Contains("epieditmode"))
            {
                imagePath = UrlResolver.GetUrl(imageReference, null, new VirtualPathArguments
                {
                    ContextMode = ContextMode.Default
                });
            }

            var imageData = new ResponsiveImageData
            {
                Path      = imagePath,
                Image     = imageReference,
                ImageType = imageType
            };

            var responsiveImage = new ResponsiveImage(imageData);

            imageUrl = responsiveImage.GetImageURL();
            return(!string.IsNullOrWhiteSpace(imageUrl));
        }
示例#6
0
        /// <summary>
        /// Returns <c>img</c> markup with <c>srcset</c> and <c>sizes</c>.
        /// </summary>
        /// <param name="responsiveImage"><see cref="ResponsiveImage" /></param>
        /// <returns></returns>
        public static string ToImgMarkup(this ResponsiveImage responsiveImage)
        {
            responsiveImage.EnsureResponsiveImage();

            var srcset = responsiveImage.ToSrcSetAttribute();
            var sizes  = responsiveImage.ToSizesSetAttribute();

            return($@"
<img{
    spacer}alt=""{responsiveImage.Description ?? string.Empty}""{
    spacer}src=""{responsiveImage.Source?.OriginalString ?? string.Empty}""{srcset}{sizes}>
");
        }
示例#7
0
        //  Foreach of the associates, lets attach a responsive image
        private Dictionary <int, ResponsiveImage> PrepareAssociateImages(List <User> associates)
        {
            Dictionary <int, ResponsiveImage> imgs = new Dictionary <int, ResponsiveImage>();

            for (int i = 0; i < associates.Count(); i++)
            {
                String          mq  = "TODO - What is this for?";
                ResponsiveImage img = new ResponsiveImage();
                img.src = associates[i].ImageString();
                img.alt = associates[i].firstName;
                img.srcset.Add(new ResponsiveImageSrc(img.src, mq));
                imgs.Add(associates[i].id, img);
            }
            return(imgs);
        }
示例#8
0
        /// <summary>
        /// Reduces <see cref="ResponsiveImage.Candidates" /> to the <c>srcset</c> attribute.
        /// </summary>
        /// <param name="responsiveImage"><see cref="ResponsiveImage" /></param>
        /// <returns></returns>
        public static string ToSrcSetAttribute(this ResponsiveImage responsiveImage)
        {
            responsiveImage.EnsureResponsiveImage();

            var collection = responsiveImage
                             .Candidates
                             .Select(i => $"{i.ImageUri} {i.Width ?? i.PixelDensity}");

            if (!collection.Any())
            {
                return(string.Empty);
            }

            var attributeValue = collection.Aggregate((a, i) => $"{a},{spacer}{i}");

            return($@"{spacer}srcset=""{attributeValue}""");
        }
示例#9
0
        /// <summary>
        /// Reduces <see cref="ResponsiveImage.Sizes" /> to the <c>sizes</c> attribute.
        /// </summary>
        /// <param name="responsiveImage"><see cref="ResponsiveImage" /></param>
        /// <returns></returns>
        public static string ToSizesSetAttribute(this ResponsiveImage responsiveImage)
        {
            responsiveImage.EnsureResponsiveImage();

            var collection = responsiveImage
                             .Sizes
                             .Select(i => $"({i.MediaCondition}) {i.LayoutWidth}");

            if (!collection.Any())
            {
                return(string.Empty);
            }

            var attributeValue = collection.Aggregate((a, i) => $"{a},{spacer}{i}");

            return($@"{spacer}sizes=""{attributeValue}""");
        }
        public static IHtmlString GetPictureTag(this ResponsiveImage responsiveImage, string pictureClasses = "",
                                                string imageClasses = "", string alternativeText = "", int imageQuality = 80)
        {
            var pictureTag = new TagBuilder("picture");

            pictureTag.MergeAttribute("class", pictureClasses.IsNullOrWhiteSpace() ? responsiveImage.DefaultPictureClasses : $"{responsiveImage.DefaultPictureClasses} {pictureClasses}");

            if (responsiveImage.Crops == null || !responsiveImage.Crops.Any())
            {
                return(new HtmlString(pictureTag.ToString()));
            }

            var crops = responsiveImage.Crops.OrderByDescending(x => x.BreakPoint).ToList();

            // Skip smallest crop
            foreach (var crop in crops.Take(responsiveImage.Crops.Count - 1))
            {
                var sourceTag = new TagBuilder("source");
                sourceTag.MergeAttribute("media", $"(min-width: {crop.BreakPoint}px)");
                sourceTag.MergeAttribute("srcset",
                                         crop.Coordinates != null
                        ? $"{responsiveImage.Url}?crop={crop.Coordinates.X1},{crop.Coordinates.Y1},{crop.Coordinates.X2},{crop.Coordinates.Y2}&cropmode=percentage&mode=crop&width={crop.Width}&height={crop.Height}&quality={imageQuality}"
                        : $"{responsiveImage.Url}?center={responsiveImage.FocalPoint.Top},{responsiveImage.FocalPoint.Left}&cropmode=percentage&mode=crop&width={crop.Width}&height={crop.Height}&quality={imageQuality}");
                pictureTag.InnerHtml += sourceTag;
            }

            var smallestCrop = crops.Last();
            var imageTag     = new TagBuilder("img");

            imageTag.MergeAttribute("src",
                                    smallestCrop.Coordinates != null
                    ? $"{responsiveImage.Url}?crop={smallestCrop.Coordinates.X1},{smallestCrop.Coordinates.Y1},{smallestCrop.Coordinates.X2},{smallestCrop.Coordinates.Y2}&cropmode=percentage&mode=crop&width={smallestCrop.Width}&height={smallestCrop.Height}&quality={imageQuality}"
                    : $"{responsiveImage.Url}?center={responsiveImage.FocalPoint.Top},{responsiveImage.FocalPoint.Left}&cropmode=percentage&mode=crop&width={smallestCrop.Width}&height={smallestCrop.Height}&quality={imageQuality}");
            imageTag.MergeAttribute("alt", alternativeText);
            imageTag.MergeAttribute("class", imageClasses.IsNullOrWhiteSpace() ? responsiveImage.DefaultImageClasses : $"{responsiveImage.DefaultImageClasses} {imageClasses}");

            pictureTag.InnerHtml += imageTag;
            return(new HtmlString(pictureTag.ToString()));
        }