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); }
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); }
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()); }
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); }
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); }
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)); }