internal IHtmlContent?GenerateHint(TagHelperContext tagHelperContext, FormGroupContext formGroupContext) { var content = formGroupContext.Hint?.Content; var attributes = formGroupContext.Hint?.Attributes; if (content == null && AspFor != null) { var description = ModelHelper.GetDescription(AspFor.ModelExplorer); if (description != null) { content = new HtmlString(description); } } if (content != null) { var resolvedIdPrefix = ResolveIdPrefix(); var hintId = resolvedIdPrefix + "-hint"; DescribedBy = AppendToDescribedBy(DescribedBy, hintId); return(Generator.GenerateHint(hintId, content, attributes)); } else { return(null); } }
private protected override IHtmlContent GenerateFormGroupContent( TagHelperContext tagHelperContext, FormGroupContext formGroupContext, TagHelperOutput tagHelperOutput, IHtmlContent childContent, out bool haveError) { var radiosContext = tagHelperContext.GetContextItem <RadiosContext>(); var contentBuilder = new HtmlContentBuilder(); var hint = GenerateHint(tagHelperContext, formGroupContext); if (hint != null) { contentBuilder.AppendHtml(hint); } var errorMessage = GenerateErrorMessage(tagHelperContext, formGroupContext); if (errorMessage != null) { contentBuilder.AppendHtml(errorMessage); } haveError = errorMessage != null; var haveFieldset = radiosContext.Fieldset != null; var radiosTagBuilder = GenerateRadios(); contentBuilder.AppendHtml(radiosTagBuilder); if (haveFieldset) { return(Generator.GenerateFieldset( DescribedBy, role: null, radiosContext.Fieldset !.Legend?.IsPageHeading, radiosContext.Fieldset.Legend?.Content, radiosContext.Fieldset.Legend?.Attributes, content: contentBuilder, radiosContext.Fieldset.Attributes)); } return(contentBuilder); TagBuilder GenerateRadios() { var resolvedIdPrefix = ResolveIdPrefix(); TryResolveName(out var resolvedName); return(Generator.GenerateRadios( resolvedIdPrefix, resolvedName, items: radiosContext.Items, attributes: RadiosAttributes.ToAttributeDictionary())); } }
private protected override IHtmlContent GenerateFormGroupContent( TagHelperContext tagHelperContext, FormGroupContext formGroupContext, TagHelperOutput tagHelperOutput, IHtmlContent childContent, out bool haveError) { var contentBuilder = new HtmlContentBuilder(); var label = GenerateLabel(formGroupContext); contentBuilder.AppendHtml(label); var hint = GenerateHint(tagHelperContext, formGroupContext); if (hint != null) { contentBuilder.AppendHtml(hint); } var errorMessage = GenerateErrorMessage(tagHelperContext, formGroupContext); if (errorMessage != null) { contentBuilder.AppendHtml(errorMessage); } haveError = errorMessage != null; var inputTagBuilder = GenerateFileUpload(haveError); contentBuilder.AppendHtml(inputTagBuilder); return(contentBuilder); TagBuilder GenerateFileUpload(bool haveError) { var resolvedId = ResolveIdPrefix(); var resolvedName = ResolveName(); return(Generator.GenerateFileUpload( haveError, resolvedId, resolvedName, DescribedBy, InputAttributes.ToAttributeDictionary())); } }
internal IHtmlContent GenerateLabel(FormGroupContext formGroupContext) { // We need some content for the label; if AspFor is null then label content must have been specified if (AspFor == null && formGroupContext.Label?.Content == null) { throw new InvalidOperationException( $"Label content must be specified when the '{AspForAttributeName}' attribute is not specified."); } var resolvedIdPrefix = ResolveIdPrefix(); var isPageHeading = formGroupContext.Label?.IsPageHeading ?? ComponentGenerator.LabelDefaultIsPageHeading; var content = formGroupContext.Label?.Content; var attributes = formGroupContext.Label?.Attributes; var resolvedContent = content ?? new HtmlString(ModelHelper.GetDisplayName(ViewContext, AspFor !.ModelExplorer, AspFor.Name)); return(Generator.GenerateLabel(resolvedIdPrefix, isPageHeading, resolvedContent, attributes)); }
private protected abstract IHtmlContent GenerateFormGroupContent( TagHelperContext tagHelperContext, FormGroupContext formGroupContext, TagHelperOutput tagHelperOutput, IHtmlContent childContent, out bool haveError);
internal IHtmlContent?GenerateErrorMessage(TagHelperContext tagHelperContext, FormGroupContext formGroupContext) { var visuallyHiddenText = formGroupContext.ErrorMessage?.VisuallyHiddenText ?? ComponentGenerator.ErrorMessageDefaultVisuallyHiddenText; var content = formGroupContext.ErrorMessage?.Content; var attributes = formGroupContext.ErrorMessage?.Attributes; if (content == null && AspFor != null && IgnoreModelStateErrors != true) { var validationMessage = ModelHelper.GetValidationMessage( ViewContext, AspFor !.ModelExplorer, AspFor.Name); if (validationMessage != null) { content = new HtmlString(validationMessage); } } if (content != null) { AddErrorToFormErrorContext(); var resolvedIdPrefix = ResolveIdPrefix(); var errorId = resolvedIdPrefix + "-error"; DescribedBy = AppendToDescribedBy(DescribedBy, errorId); attributes ??= new AttributeDictionary(); attributes["id"] = errorId; return(Generator.GenerateErrorMessage(visuallyHiddenText, content, attributes)); } else { return(null); } void AddErrorToFormErrorContext() { if (tagHelperContext.Items.TryGetValue(typeof(FormErrorContext), out var formErrorContextObj) && formErrorContextObj is FormErrorContext formErrorContext) { var errorFieldId = GetErrorFieldId(tagHelperContext); var href = "#" + errorFieldId; formErrorContext.AddError(content, href); } } }
private protected override IHtmlContent GenerateFormGroupContent( TagHelperContext tagHelperContext, FormGroupContext formGroupContext, TagHelperOutput tagHelperOutput, IHtmlContent childContent, out bool haveError) { var contentBuilder = new HtmlContentBuilder(); var label = GenerateLabel(formGroupContext); contentBuilder.AppendHtml(label); var hint = GenerateHint(tagHelperContext, formGroupContext); if (hint != null) { contentBuilder.AppendHtml(hint); } var errorMessage = GenerateErrorMessage(tagHelperContext, formGroupContext); if (errorMessage != null) { contentBuilder.AppendHtml(errorMessage); } haveError = errorMessage != null; var textAreaTagBuilder = GenerateTextArea(haveError); contentBuilder.AppendHtml(textAreaTagBuilder); return(contentBuilder); TagBuilder GenerateTextArea(bool haveError) { var textAreaContext = tagHelperContext.GetContextItem <TextAreaContext>(); var resolvedId = ResolveIdPrefix(); var resolvedName = ResolveName(); var resolvedContent = textAreaContext.Value ?? new HtmlString(AspFor != null ? ModelHelper.GetModelValue(ViewContext, AspFor.ModelExplorer, AspFor.Name) : string.Empty); var resolvedTextAreaAttributes = TextAreaAttributes.ToAttributeDictionary(); resolvedTextAreaAttributes.MergeCssClass("govuk-js-textarea"); return(Generator.GenerateTextArea( haveError, resolvedId, resolvedName, Rows, DescribedBy, Autocomplete, Spellcheck, Disabled, resolvedContent, resolvedTextAreaAttributes)); } }