Beispiel #1
0
        protected void Process(RenderTreeBuilder builder2, IGrouping <int, IMField> groupResult)
        {
            if (groupResult.Key != 0 && !IsInTableRow)
            {
                builder2.OpenElement(10, "div");
                builder2.AddAttribute(11, "class", "m-form-row" + (groupResult.Count() > 1 ? " multiple-forms-in-row" : string.Empty));
            }

            foreach (var field in groupResult)
            {
                string cssClass = "form-group col-"; //TODO we use bootstrap here - good idea or bad?

                if (groupResult.Key == 0)
                {
                    cssClass += "12";
                }
                else
                {
                    cssClass += 12 / groupResult.Count();
                }

                if (field is IMPropertyField propField)
                {
                    var propertyInfo = GetPropertyInfo(propField);

                    if (propertyInfo.GetCustomAttribute <HiddenAttribute>() != null)
                    {
                        continue;
                    }

                    var inpId = Guid.NewGuid();

                    if (IsInTableRow)
                    {
                        builder2.OpenElement(16, "td");
                        builder2.AddAttribute(281, "data-is-in-table-row");

                        if (field.AdditionalAttributes != null && field.AdditionalAttributes.TryGetValue(Extensions.MFORM_IN_TABLE_ROW_TD_STYLE_ATTRIBUTE, out object value))
                        {
                            builder2.AddAttribute(247, "style", value);
                        }

                        if (propertyInfo.PropertyType != null)
                        {
                            AddInput(builder2, field, propertyInfo, inpId);
                        }

                        builder2.CloseElement();
                        continue;
                    }

                    if (groupResult.Key == 0)
                    {
                        builder2.OpenElement(10, "div");
                        builder2.AddAttribute(11, "class", "m-form-row");
                    }

                    //  <div class="form-group">
                    builder2.OpenElement(10, "div");
                    builder2.AddAttribute(272, "class", cssClass);

                    //  <label for="@inpId">@property.Name</label>
                    builder2.OpenElement(275, "label");
                    builder2.AddAttribute(276, "for", inpId);
                    builder2.AddAttribute(277, "class", "col-sm-12 col-form-label"); //TODO we use bootstrap here - good idea or bad?

                    builder2.AddMarkupContent(286, propertyInfo.GetDisplayName(L, true));

                    if (propertyInfo.GetCustomAttribute <RequiredAttribute>() != null)
                    {
                        builder2.OpenElement(291, "span");
                        builder2.AddAttribute(292, "style", "color: red;");
                        builder2.AddContent(293, " *");
                        builder2.CloseElement();
                    }

                    builder2.CloseElement();

                    if (propField.TemplateAfterLabel != null)
                    {
                        builder2.AddContent(294, propField.TemplateAfterLabel);
                    }

                    builder2.OpenElement(296, "div");
                    builder2.AddAttribute(297, "class", "col-sm-12");  //TODO we use bootstrap here - good idea or bad?

                    AddInput(builder2, field, propertyInfo, inpId);

                    builder2.CloseElement(); // </div>


                    builder2.CloseElement(); // </div>

                    if (groupResult.Key == 0)
                    {
                        builder2.CloseElement(); // </div>
                    }
                }
                else if (field is IMFieldGenerator fieldGenerator)
                {
                    MFieldGeneratorContext context = new MFieldGeneratorContext()
                    {
                        Form = this
                    };

                    if (IsInTableRow)
                    {
                        builder2.OpenElement(16, "td");
                    }

                    //  <div class="form-group">
                    builder2.OpenElement(10, "div");
                    builder2.AddAttribute(272, "class", cssClass);

                    builder2.AddContent(42, fieldGenerator.Template?.Invoke(context));

                    builder2.CloseElement();

                    if (IsInTableRow)
                    {
                        builder2.CloseElement();
                    }
                }
                else if (field is MFieldComponent mfieldComponent)
                {
                    builder2.OpenComponent(336, mfieldComponent.CompnentType);

                    if (mfieldComponent.AdditionalAttributes != null)
                    {
                        builder2.AddMultipleAttributes(339, mfieldComponent.AdditionalAttributes);
                    }

                    builder2.CloseComponent();
                }
            }

            if (groupResult.Key != 0 && !IsInTableRow)
            {
                builder2.CloseElement();
            }
        }
Beispiel #2
0
        protected void Process(RenderTreeBuilder builder2, IGrouping <int, IMField> groupResult)
        {
            if (groupResult.Key != 0 && !IsInTableRow)
            {
                builder2.OpenElement(10, "div");
                builder2.AddAttribute(11, "class", "m-form-row" + (groupResult.Count() > 1 ? " multiple-forms-in-row" : string.Empty));
            }

            foreach (var field in groupResult)
            {
                if (field is IMPropertyField propField)
                {
                    var propertyInfo = GetPropertyInfo(propField);

                    if (propertyInfo.GetCustomAttribute(typeof(HiddenAttribute)) != null)
                    {
                        continue;
                    }

                    if (field.Attributes != null)
                    {
                        propertyInfo.SetAttributes(field.Attributes);
                    }

                    var inpId = Guid.NewGuid();

                    if (IsInTableRow)
                    {
                        builder2.OpenElement(16, "td");
                        //       builder2.AddMultipleAttributes(17, field.AdditionalAttributes);
                        // update 13.07.2020, add AdditionalAttributes to Input

                        if (field.AdditionalAttributes != null && field.AdditionalAttributes.TryGetValue(Extensions.MFORM_IN_TABLE_ROW_TD_STYLE_ATTRIBUTE, out object value))
                        {
                            builder2.AddAttribute(247, "style", value);
                        }

                        if (propertyInfo.PropertyType != null)
                        {
                            AddInput(builder2, field, propertyInfo, inpId);
                        }

                        builder2.CloseElement();
                        continue;
                    }

                    if (groupResult.Key == 0)
                    {
                        builder2.OpenElement(10, "div");
                        builder2.AddAttribute(11, "class", "m-form-row");
                    }

                    //  <div class="form-group">
                    builder2.OpenElement(10, "div");

                    string cssClass = "form-group col-"; //TODO we use bootstrap here - good idea or bad?

                    if (groupResult.Key == 0)
                    {
                        cssClass += "12";
                    }
                    else
                    {
                        cssClass += 12 / groupResult.Count();
                    }

                    builder2.AddAttribute(11, "class", cssClass);

                    //  <label for="@inpId">@property.Name</label>
                    builder2.OpenElement(13, "label");
                    builder2.AddAttribute(14, "for", inpId);
                    builder2.AddAttribute(14, "class", "col-sm-12 col-form-label"); //TODO we use bootstrap here - good idea or bad?

                    var displayAttribute = propertyInfo.GetCustomAttribute(typeof(DisplayAttribute)) as DisplayAttribute;
                    if (displayAttribute != null)
                    {
                        builder2.AddContent(280, displayAttribute.Name);
                    }
                    else
                    {
                        builder2.AddContent(284, propertyInfo.Name);
                    }

                    builder2.CloseElement();

                    builder2.OpenElement(16, "div");
                    builder2.AddAttribute(17, "class", "col-sm-12");  //TODO we use bootstrap here - good idea or bad?

                    AddInput(builder2, field, propertyInfo, inpId);

                    builder2.CloseElement(); // </div>


                    builder2.CloseElement(); // </div>

                    if (groupResult.Key == 0)
                    {
                        builder2.CloseElement(); // </div>
                    }
                }
                else if (field is IMFieldGenerator fieldGenerator)
                {
                    MFieldGeneratorContext context = new MFieldGeneratorContext()
                    {
                        Form = this
                    };

                    if (IsInTableRow)
                    {
                        builder2.OpenElement(16, "td");
                    }

                    builder2.AddContent(42, fieldGenerator.Template?.Invoke(context));

                    if (IsInTableRow)
                    {
                        builder2.CloseElement();
                    }
                }
            }

            if (groupResult.Key != 0 && !IsInTableRow)
            {
                builder2.CloseElement();
            }
        }