public void Process(RenderVariantFieldArgs args)
        {
            if (args.VariantField is VariantSection variantSection)
            {
                if (variantSection.IsLink && string.IsNullOrWhiteSpace(variantSection.Tag))
                {
                    // known link types are Hyperlink and RenderRenderingVariantFieldProcessor+RenderFieldControl
                    if (args.ResultControl is Control link && link.Controls.Count == 1)
                    {
                        if (link.Controls[0] is HtmlGenericControl unwantedContainer)
                        {
                            var unwantedTags = new[] { "div", "span" };
                            if (unwantedTags.Any(tag => string.Equals(unwantedContainer.TagName, tag, StringComparison.OrdinalIgnoreCase)))
                            {
                                // act only if dummy <div> or <span> without attributes
                                if (unwantedContainer.Attributes.Count == 0)
                                {
                                    // act only if there are controls in it
                                    if (unwantedContainer.Controls.Count > 0)
                                    {
                                        ReplaceContainerWithItsChildren(unwantedContainer);

                                        // re-render control since it's changed
                                        args.Result = RenderControl(args.ResultControl);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        public override void RenderField(RenderVariantFieldArgs args)
        {
            Sitecore.XA.Foundation.RenderingVariants.Fields.VariantField variantField = args.VariantField as Sitecore.XA.Foundation.RenderingVariants.Fields.VariantField;
            if (variantField == null)
            {
                return;
            }

            FileField fileField = args.Item.Fields[variantField.ItemName];

            // If not a file field, continue with normal processing
            if (fileField == null)
            {
                base.RenderField(args);
                return;
            }

            MediaItem mediaItem = fileField.MediaItem;

            // Get media item from file field, check for svg
            if (mediaItem == null || mediaItem.Extension != "svg")
            {
                base.RenderField(args);
                return;
            }

            args.ResultControl = new LiteralControl()
            {
                Text = GenerateSvgHtml(mediaItem)
            };
            args.Result = RenderControl(args.ResultControl);
        }
        public new void Process(RenderVariantFieldArgs args)
        {
            if (args.VariantField is VariantSection variantSection)
            {
                if (variantSection.IsLink && string.IsNullOrWhiteSpace(variantSection.Tag))
                {
                    var linkAttributes = variantSection.LinkAttributes;
                    if (linkAttributes.Count > 0)
                    {
                        if (args.ResultControl is RenderFieldControl link)
                        {
                            // RenderFieldControl is not a real control, but dirty hack which consists of
                            // two strings: FirstPart and LastPart, and which is being rendered as
                            // > return FirstPart + RenderChildControls() + LastPart
                            // so we have to use dirty hack to extract href
                            var href = ExtractHref(args.Result);
                            if (string.IsNullOrWhiteSpace(href))
                            {
                                return;
                            }

                            // recreate hyperlink using good-working piece of SXA code
                            var newHyperLink = CreateHyperLink(href, args.Item, false, variantSection.LinkAttributes);

                            // move children
                            MoveChildControls(link, newHyperLink);

                            // save new control and re-render
                            args.ResultControl = newHyperLink;
                            args.Result        = RenderControl(newHyperLink);
                        }
                    }
                }
            }
        }
Esempio n. 4
0
        public override void RenderField(RenderVariantFieldArgs args)
        {
            var variantField = args.VariantField as VariantScriptReferenceTag;

            if (variantField != null)
            {
                var id = variantField?.ScriptMedia;
                if (string.IsNullOrWhiteSpace(id))
                {
                    return;
                }

                var scriptItem = Context.Database.GetItem(new ID(id));
                if (scriptItem == null)
                {
                    return;
                }

                var url = MediaManager.GetMediaUrl(scriptItem);

                var tag = new HtmlGenericControl(variantField.Tag);
                tag.Attributes.Add("type", "text/javascript");
                tag.Attributes.Add("defer", String.Empty);
                tag.Attributes.Add("src", url);

                args.ResultControl = tag;
                args.Result        = RenderControl(args.ResultControl);
            }
        }
Esempio n. 5
0
        public override void RenderField(RenderVariantFieldArgs args)
        {
            var variantField = args.VariantField as HandlebarVariantTemplate;

            if (variantField != null)
            {
                HtmlGenericControl htmlGenericControl = new HtmlGenericControl((string.IsNullOrWhiteSpace(variantField.Tag) ? "div" : variantField.Tag));
                this.AddClass(htmlGenericControl, variantField.CssClass);
                this.AddWrapperDataAttributes(variantField, args, htmlGenericControl);

                if (HttpContext.Current.Items["htmlHelper"] == null)
                {
                    HttpContext.Current.Items.Add("htmlHelper", args.HtmlHelper);
                }

                var content = HandlebarManager.GetTemplatedContent(variantField.TemplateItem, args.Item, args.Model);



                htmlGenericControl.InnerHtml = content.ToHtmlString();

                args.ResultControl = htmlGenericControl;
                args.Result        = this.RenderControl(args.ResultControl);
            }
        }
Esempio n. 6
0
        public override void RenderField(RenderVariantFieldArgs args)
        {
            var variantField = args.VariantField as VariantScript;

            if (variantField != null)
            {
                args.ResultControl = RenderScriptField(variantField, args);
                args.Result        = RenderControl(args.ResultControl);
            }
        }
Esempio n. 7
0
        public override void RenderField(RenderVariantFieldArgs args)
        {
            var variantField = args.VariantField as VariantQueryString;

            if (variantField != null)
            {
                args.ResultControl = RenderQueryStringValue(variantField, args);
                args.Result        = RenderControl(args.ResultControl);
            }
        }
Esempio n. 8
0
        protected virtual Control RenderScriptField(VariantScript variantScript, RenderVariantFieldArgs args)
        {
            if (!string.IsNullOrWhiteSpace(variantScript.Script))
            {
                var tag = new HtmlGenericControl("script")
                {
                    InnerHtml = variantScript.Script
                };
                tag.Attributes.Add("defer", String.Empty);
                return(tag);
            }

            return(new LiteralControl());
        }
Esempio n. 9
0
        public override void RenderField(RenderVariantFieldArgs args)
        {
            string styleInlineValue = String.Empty;
            var    variantField     = args.VariantField as VariantImageSection;

            if (!string.IsNullOrWhiteSpace(variantField?.ImageFieldName) && args.Item != null)
            {
                ImageField imgField = args.Item.Fields[variantField.ImageFieldName];
                if (imgField?.MediaItem != null)
                {
                    string url = MediaManager.GetMediaUrl(imgField.MediaItem);
                    styleInlineValue = $"background-image: url({url})";
                }
            }

            var tag = new HtmlGenericControl(string.IsNullOrWhiteSpace(variantField.Tag) ? "div" : variantField.Tag);

            if (styleInlineValue.Length > 0)
            {
                tag.Attributes.Add("style", styleInlineValue);
            }

            AddClass(tag, variantField.CssClass);
            AddWrapperDataAttributes(variantField, args, tag);

            foreach (BaseVariantField sectionField in variantField.SectionFields)
            {
                var variantFieldArgs = new RenderVariantFieldArgs
                {
                    VariantField      = sectionField,
                    Item              = args.Item,
                    HtmlHelper        = args.HtmlHelper,
                    IsControlEditable = args.IsControlEditable,
                    IsFromComposite   = args.IsFromComposite,
                    RendererMode      = args.RendererMode,
                    Model             = args.Model
                };

                CorePipeline.Run("renderVariantField", variantFieldArgs);

                if (variantFieldArgs.ResultControl != null)
                {
                    tag.Controls.Add(variantFieldArgs.ResultControl);
                }
            }

            args.ResultControl = variantField.IsLink ? InsertHyperLink(tag, args.Item, variantField.LinkAttributes, variantField.LinkField, false, args.HrefOverrideFunc) : tag;
            args.Result        = RenderControl(args.ResultControl);
        }
Esempio n. 10
0
        public override void RenderField(RenderVariantFieldArgs args)
        {
            var variantField = args.VariantField as VariantImageWithClass;

            if (args.Item.Paths.IsMediaItem)
            {
                args.ResultControl = CreateResponsiveImage(args.Item, variantField, args.Item[Templates.Image.Fields.Alt]);
                args.Result        = RenderControl(args.ResultControl);
            }
            else
            {
                if (string.IsNullOrWhiteSpace(variantField != null ? variantField.FieldName : null))
                {
                    return;
                }

                if (PageMode.IsExperienceEditorEditing)
                {
                    args.ResultControl = new FieldRenderer()
                    {
                        Item              = args.Item,
                        FieldName         = variantField.FieldName,
                        DisableWebEditing = !args.IsControlEditable
                    };

                    args.Result = RenderControl(args.ResultControl);
                }
                else
                {
                    Field field1 = args.Item.Fields[variantField.FieldName];
                    if (field1 == null)
                    {
                        return;
                    }

                    ImageField field2 = FieldTypeManager.GetField(field1) as ImageField;

                    if ((field2 != null ? field2.MediaItem : null) == null)
                    {
                        return;
                    }
                    string altText = string.IsNullOrWhiteSpace(field2.Alt) ? field2.MediaItem[Templates.Image.Fields.Alt] : field2.Alt;

                    args.ResultControl = CreateResponsiveImage(field2.MediaItem, variantField, altText);
                    args.Result        = RenderControl(args.ResultControl);
                }
            }
        }
        public override void RenderField(RenderVariantFieldArgs args)
        {
            var variantField = args.VariantField as VariantImageLink;

            var link  = Render(variantField.RenderLinkFromVariantItem ? variantField.VariantItem : args.Item, variantField.LinkFieldName, variantField.LinkClass);
            var image = Render(variantField.RenderImageFromVariantItem ? variantField.VariantItem : args.Item, variantField.MediaFieldName, variantField.ImageClass);

            if (!string.IsNullOrWhiteSpace(image))
            {
                var htmlOutput = string.IsNullOrWhiteSpace(link)
                    ? image
                    : Regex.Replace(link, @">.*<", $">{image}<");

                args.ResultControl = new LiteralControl(htmlOutput);
                args.Result        = RenderControl(args.ResultControl);
            }
        }
Esempio n. 12
0
        protected virtual Control RenderQueryStringValue(VariantField variantField, RenderVariantFieldArgs args)
        {
            var queryString = HttpContext.Current.Request.QueryString;

            if (!string.IsNullOrEmpty(variantField.FieldName) && !string.IsNullOrWhiteSpace(variantField.Tag))
            {
                if (queryString.HasKeys() && queryString[variantField.FieldName] != null)
                {
                    var tag = new HtmlGenericControl(variantField.Tag);
                    AddClass(tag, (variantField.CssClass + " " + GetFieldCssClass(variantField.FieldName)).Trim());
                    tag.InnerText = queryString[variantField.FieldName];
                    return(tag);
                }

                if (args.IsControlEditable && PageMode.IsExperienceEditorEditing)
                {
                    return(GetVariantFieldNameLiteral(variantField.FieldName));
                }
            }

            return(new LiteralControl());
        }
        public override void RenderField(RenderVariantFieldArgs args)
        {
            var control = new PlaceHolder();

            var variantItemReference = args.VariantField as VariantItemReference;

            if (!string.IsNullOrWhiteSpace(variantItemReference?.PassThroughItem))
            {
                var newContextItem = Sitecore.Context.Database.GetItem(new ID(variantItemReference.PassThroughItem));
                if (newContextItem != null)
                {
                    foreach (BaseVariantField referencedItem in variantItemReference.NestedFields)
                    {
                        RenderVariantFieldArgs variantFieldArgs = new RenderVariantFieldArgs
                        {
                            VariantField      = referencedItem,
                            Item              = newContextItem,
                            HtmlHelper        = args.HtmlHelper,
                            IsControlEditable = args.IsControlEditable,
                            IsFromComposite   = args.IsFromComposite,
                            RendererMode      = args.RendererMode,
                            Model             = args.Model
                        };

                        CorePipeline.Run("renderVariantField", variantFieldArgs);
                        if (variantFieldArgs.ResultControl != null)
                        {
                            control.Controls.Add(variantFieldArgs.ResultControl);
                        }
                    }
                }
            }

            args.ResultControl = control;
            args.Result        = RenderControl(args.ResultControl);
        }
 public override void RenderField(RenderVariantFieldArgs args) => throw new NotImplementedException();