Example #1
0
        public async Task ProcessAsync_WithPrefixAndSuffixGeneratesExpectedOutput()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-input",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-input",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var formGroupContext = (FormGroupBuilder)context.Items[typeof(FormGroupBuilder)];
                formGroupContext.TrySetLabel(
                    isPageHeading: false,
                    attributes: null,
                    content: new HtmlString("The label"));

                var inputContext = (InputContext)context.Items[typeof(InputContext)];
                inputContext.SetPrefix(attributes: null, content: new HtmlString("prefix"));
                inputContext.SetSuffix(attributes: null, content: new HtmlString("suffix"));

                var tagHelperContent = new DefaultTagHelperContent();
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new InputTagHelper(new DefaultGovUkHtmlGenerator(), new DefaultModelHelper())
            {
                Id           = "my-id",
                DescribedBy  = "describedby",
                Name         = "my-id",
                Autocomplete = "none",
                InputMode    = "numeric",
                Pattern      = "[0-9]*",
                Type         = "number",
                Value        = "42"
            };

            // Act
            await tagHelper.ProcessAsync(context, output);

            // Assert
            var html    = output.AsString();
            var node    = HtmlNode.CreateNode(html);
            var wrapper = node.ChildNodes.FindFirst("div");

            Assert.Equal(
                "<div class=\"govuk-input__wrapper\">" +
                "<div aria-hidden=\"true\" class=\"govuk-input__prefix\">prefix</div>" +
                "<input aria-describedby=\"describedby\" autocomplete=\"none\" class=\"govuk-input\" id=\"my-id\" inputmode=\"numeric\" name=\"my-id\" pattern=\"[0-9]*\" type=\"number\" value=\"42\">" +
                "<div aria-hidden=\"true\" class=\"govuk-input__suffix\">suffix</div>" +
                "</div>",
                wrapper.OuterHtml);
        }
Example #2
0
        private async Task <TagHelperOutput> CreateInput(TagHelperContext context)
        {
            InputTagHelper inputTagHelper = new InputTagHelper(Generator);

            inputTagHelper.ViewContext = ViewContext;
            inputTagHelper.For         = For;
            TagHelperOutput tagHelperOutput = TagHelperExtension.CreateTagHelperOutput("input");
            await inputTagHelper.ProcessAsync(context, tagHelperOutput);

            tagHelperOutput.SetAttribute("type", GetInputTypeName(ColumnType));
            tagHelperOutput.SetAttribute("class", "form-control");
            return(tagHelperOutput);
        }
Example #3
0
        public async Task ProcessAsync_HasErrorClassWhenErrorSpecified()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-input",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-input",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var formGroupContext = (FormGroupBuilder)context.Items[typeof(FormGroupBuilder)];
                formGroupContext.TrySetLabel(
                    isPageHeading: false,
                    attributes: null,
                    content: new HtmlString("The label"));
                formGroupContext.TrySetErrorMessage(
                    visuallyHiddenText: null,
                    attributes: null,
                    content: new HtmlString("Error"));

                var tagHelperContent = new DefaultTagHelperContent();
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new InputTagHelper(new DefaultGovUkHtmlGenerator())
            {
                Id           = "my-id",
                DescribedBy  = "describedby",
                Name         = "my-id",
                Autocomplete = "none",
                InputMode    = "numeric",
                Pattern      = "[0-9]*",
                Type         = "number",
                Value        = "42"
            };

            // Act
            await tagHelper.ProcessAsync(context, output);

            // Assert
            var html = output.AsString();
            var node = HtmlNode.CreateNode(html);

            Assert.Contains("govuk-input--error", node.ChildNodes.FindFirst("input").GetCssClasses());
        }
Example #4
0
        private async Task <TagHelperOutput> GenerateTextBox(TagHelperContext context)
        {
            var inputTagHelper =
                new InputTagHelper(_htmlGenerator)
            {
                For         = this.For,
                ViewContext = this.ViewContext,
            };

            var tagHelperOutput = CreateTagHelperOutput("input");

            tagHelperOutput.Attributes.Add(new TagHelperAttribute("class", "form-control"));

            await inputTagHelper.ProcessAsync(context, tagHelperOutput);

            return(tagHelperOutput);
        }
Example #5
0
        private async Task <TagHelperOutput> GenerateTextBox(TagHelperContext context)
        {
            var inputTagHelper =
                new InputTagHelper(_htmlGenerator)
            {
                For         = this.For,
                ViewContext = this.ViewContext,
            };

            var tagHelperOutput = CreateTagHelperOutput("input");

            tagHelperOutput.Attributes.Add(new TagHelperAttribute("class", _defaultInputClass));
            tagHelperOutput.Attributes.Add(new TagHelperAttribute("placeholder", string.IsNullOrEmpty(this.For.Metadata.DisplayName) ? this.For.Metadata.Name : this.For.Metadata.DisplayName));

            await inputTagHelper.ProcessAsync(context, tagHelperOutput);

            return(tagHelperOutput);
        }
Example #6
0
        private async Task <TagHelperOutput> CreateInputElement(TagHelperContext context)
        {
            InputTagHelper inputTagHelper =
                new InputTagHelper(Generator)
            {
                For         = this.For,
                ViewContext = this.ViewContext
            };

            TagHelperOutput inputOutput = CreateTagHelperOutput("input");

            await inputTagHelper.ProcessAsync(context, inputOutput);

            inputOutput.Attributes.Add(
                new TagHelperAttribute("class", _defaultInputClass));

            return(inputOutput);
        }
        public ClientFormFieldAttribuleMap <T> GetFieldAttriutesForModel <T>(bool camelcasePropertyNames = false)
        {
            var modelState      = new ModelStateDictionary();
            var viewData        = new ViewDataDictionary <T>(_metadataProvider, modelState);
            var viewContext     = _viewContextGenerator.GenerateViewContext <T>();
            var expressionParam = Expression.Parameter(typeof(T), "m");

            // map the methods to the interface, and then get the methods implementation from the class
            var expressionMethod = _expressionProvider.GetType()
                                   .GetInterfaceMap(typeof(IModelExpressionProvider)).InterfaceMethods
                                   .Single(m => m.Name == nameof(_expressionProvider.CreateModelExpression));

            var propertyAttributes = new Dictionary <string, ClientFormField>();

            foreach (var prop in typeof(T).GetProperties())
            {
                var propExpression = Expression.Property(expressionParam, prop);
                var expression     = Expression.Lambda(propExpression, expressionParam);

                var genericExpressionMethod = expressionMethod
                                              .MakeGenericMethod(typeof(T), prop.PropertyType);

                var helper = new InputTagHelper(_generator)
                {
                    For = (ModelExpression)genericExpressionMethod
                          .Invoke(_expressionProvider, new object[] { viewData, expression }),
                    ViewContext = viewContext
                };

                var attrs      = new TagHelperAttributeList();
                var tagContext = new TagHelperContext(attrs, new Dictionary <object, object>(), Guid.NewGuid().ToString("N"));
                var output     = new TagHelperOutput("input", attrs, (_, e) => Task.FromResult <TagHelperContent>(new DefaultTagHelperContent()));
                helper.ProcessAsync(tagContext, output);
                propertyAttributes.Add(prop.Name, new ClientFormField(
                                           output.Attributes.ToDictionary(a => a.Name, a => $"{a.Value}")));
            }

            return(new ClientFormFieldAttribuleMap <T>(propertyAttributes));
        }