protected internal virtual void RenderInvalidMessageElement(IFormField formField, HtmlDocumentBuilder documentBuilder) { var divElement = new HtmlElementWriter(DivElement); var formFieldId = formField.Id; var ifExpression = string.Format(InvalidExpression + " && " + DirtyExpression, formFieldId, formFieldId); divElement.Attribute(NgIfAttribute, ifExpression).Attribute(ClassAttribute, HasErrorClass); // <div ng-if="....$invalid && ....$dirty"...> documentBuilder.StartElement(divElement); if (!IsDate(formField)) { RenderInvalidValueMessage(formField, documentBuilder); RenderInvalidTypeMessage(formField, documentBuilder); } else { RenderInvalidDateMessage(formField, documentBuilder); } documentBuilder.EndElement(); }
protected internal virtual string RenderFormData(IFormData formData) { if ((formData == null) || (((formData.FormFields == null) || (formData.FormFields.Count == 0)) && ((formData.FormProperties == null) || (formData.FormProperties.Count == 0)))) { return(null); } var formElement = new HtmlElementWriter(FormElement).Attribute(NameAttribute, GeneratedFormName) .Attribute(RoleAttribute, FormRole); var documentBuilder = new HtmlDocumentBuilder(formElement); // render fields foreach (var formField in formData.FormFields) { RenderFormField(formField, documentBuilder); } // render deprecated form properties foreach (var formProperty in formData.FormProperties) { RenderFormField(new FormPropertyAdapter(formProperty), documentBuilder); } // end document element documentBuilder.EndElement(); return(documentBuilder.HtmlString); }
protected internal virtual void RenderSelectBox(IFormField formField, HtmlDocumentBuilder documentBuilder) { var selectBox = new HtmlElementWriter(SelectElement, false); AddCommonFormFieldAttributes(formField, selectBox); // <select ...> documentBuilder.StartElement(selectBox); // <option ...> RenderSelectOptions(formField, documentBuilder); // </select> documentBuilder.EndElement(); }
protected internal virtual void RenderFormField(IFormField formField, HtmlDocumentBuilder documentBuilder) { // start group var divElement = new HtmlElementWriter(DivElement).Attribute(ClassAttribute, FormGroupClass); documentBuilder.StartElement(divElement); var formFieldId = formField.Id; var formFieldLabel = formField.Label; // write label if (!ReferenceEquals(formFieldLabel, null) && (formFieldLabel.Length > 0)) { var labelElement = new HtmlElementWriter(LabelElement).Attribute(ForAttribute, formFieldId) .TextContent(formFieldLabel); // <label for="...">...</label> documentBuilder.StartElement(labelElement).EndElement(); } // render form control if (IsEnum(formField)) { RenderSelectBox(formField, documentBuilder); } else if (IsDate(formField)) { RenderDatePicker(formField, documentBuilder); } else { RenderInputField(formField, documentBuilder); } RenderInvalidMessageElement(formField, documentBuilder); // end group documentBuilder.EndElement(); }
protected internal virtual void RenderDatePicker(IFormField formField, HtmlDocumentBuilder documentBuilder) { //bool isReadOnly = isReadOnly(formField); // start input-group var inputGroupDivElement = new HtmlElementWriter(DivElement).Attribute(ClassAttribute, InputGroupClass); var formFieldId = formField.Id; // <div> documentBuilder.StartElement(inputGroupDivElement); // input field var inputField = CreateInputField(formField); //if (!isReadOnly) { inputField.Attribute(DatepickerPopupAttribute, DateFormat) .Attribute(IsOpenAttribute, string.Format(DateFieldOpenedAttribute, formFieldId)); } // <input ... /> documentBuilder.StartElement(inputField).EndElement(); // if form field is read only, do not render date picker open button //if (!isReadOnly) { // input addon var addonElement = new HtmlElementWriter(DivElement).Attribute(ClassAttribute, InputGroupBtnClass); // <div> documentBuilder.StartElement(addonElement); // button to open date picker var buttonElement = new HtmlElementWriter(ButtonElement).Attribute(TypeAttribute, ButtonButtonType) .Attribute(ClassAttribute, ButtonDefaultClass) .Attribute(NgClickAttribute, string.Format(OpenDatepickerFunctionSnippet, formFieldId)); // <button> documentBuilder.StartElement(buttonElement); var iconElement = new HtmlElementWriter(Element).Attribute(ClassAttribute, CalendarGlyphicon); // <i ...></i> documentBuilder.StartElement(iconElement).EndElement(); // </button> documentBuilder.EndElement(); // </div> documentBuilder.EndElement(); var scriptElement = new HtmlElementWriter(ScriptElement).Attribute(CamScriptAttribute, null) .Attribute(TypeAttribute, TextFormScriptType) .TextContent(string.Format(OpenDatepickerSnippet, formFieldId, formFieldId)); // <script ...> </script> documentBuilder.StartElement(scriptElement).EndElement(); } // </div> documentBuilder.EndElement(); }