Ejemplo n.º 1
0
        public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            #region << Init >>
            var initSuccess = InitField(context, output);

            if (!initSuccess)
            {
                return(Task.CompletedTask);
            }

            if (String.IsNullOrWhiteSpace(TextTrue))
            {
                TextTrue = "selected";
            }

            if (String.IsNullOrWhiteSpace(TextFalse))
            {
                TextFalse = "not selected";
            }

            #endregion


            #region << Render >>
            if (Mode == FieldRenderMode.Form)
            {
                var wrapper1 = new TagBuilder("div");
                wrapper1.AddCssClass("form-control-plaintext erp-checkbox");
                var wrapper2 = new TagBuilder("div");
                wrapper2.AddCssClass("form-check");
                var labelWrapper = new TagBuilder("label");
                labelWrapper.AddCssClass("form-check-label");

                var inputHidden = new TagBuilder("input");
                inputHidden.Attributes.Add("data-source-id", $"input-{FieldId}");
                inputHidden.Attributes.Add("type", "hidden");
                inputHidden.Attributes.Add("name", Name);
                inputHidden.Attributes.Add("value", (Value ?? "").ToString().ToLowerInvariant());
                labelWrapper.InnerHtml.AppendHtml(inputHidden);

                var inputFake = new TagBuilder("input");
                inputFake.Attributes.Add("id", $"input-{FieldId}");
                inputFake.Attributes.Add("type", "checkbox");
                inputFake.Attributes.Add("value", "true");
                inputFake.Attributes.Add("data-field-name", Name);
                if (Access == FieldAccess.ReadOnly)
                {
                    inputFake.Attributes.Add("readonly", null);
                }

                inputFake.AddCssClass($"form-check-input {(ValidationErrors.Count > 0 ? "is-invalid" : "")}");

                if (Value != null && Value)
                {
                    inputFake.Attributes.Add("checked", "checked");
                }
                labelWrapper.InnerHtml.AppendHtml(inputFake);

                labelWrapper.InnerHtml.AppendHtml(TextTrue);
                wrapper2.InnerHtml.AppendHtml(labelWrapper);
                wrapper1.InnerHtml.AppendHtml(wrapper2);

                output.Content.AppendHtml(wrapper1);


                var jsCompressor = new JavaScriptCompressor();
                #region << Init Scripts >>
                var tagHelperInitialized = false;
                if (ViewContext.HttpContext.Items.ContainsKey(typeof(WvFieldCheckbox) + "-form"))
                {
                    var tagHelperContext = (WvTagHelperContext)ViewContext.HttpContext.Items[typeof(WvFieldCheckbox) + "-form"];
                    tagHelperInitialized = tagHelperContext.Initialized;
                }
                if (!tagHelperInitialized)
                {
                    var scriptContent = FileService.GetEmbeddedTextResource("form.js", "WebVella.Erp.Web.TagHelpers.WvFieldCheckbox");
                    var scriptEl      = new TagBuilder("script");
                    scriptEl.Attributes.Add("type", "text/javascript");
                    scriptEl.InnerHtml.AppendHtml(jsCompressor.Compress(scriptContent));
                    output.PostContent.AppendHtml(scriptEl);

                    ViewContext.HttpContext.Items[typeof(WvFieldCheckbox) + "-form"] = new WvTagHelperContext()
                    {
                        Initialized = true
                    };
                }
                #endregion

                #region << Add Inline Init Script for this instance >>
                var initScript = new TagBuilder("script");
                initScript.Attributes.Add("type", "text/javascript");
                var scriptTemplate = @"
						$(function(){
							CheckboxFormInit(""{{FieldId}}"");
						});"                        ;
                scriptTemplate = scriptTemplate.Replace("{{FieldId}}", (FieldId ?? null).ToString());

                initScript.InnerHtml.AppendHtml(jsCompressor.Compress(scriptTemplate));

                output.PostContent.AppendHtml(initScript);
                #endregion
            }
            else if (Mode == FieldRenderMode.Display)
            {
                var wrapper = new TagBuilder("div");
                wrapper.Attributes.Add("id", $"input-{FieldId}");
                wrapper.AddCssClass("form-control-plaintext erp-checkbox");
                if (!String.IsNullOrWhiteSpace(Name))
                {
                    wrapper.Attributes.Add("data-field-name", Name);
                }
                wrapper.Attributes.Add("data-field-value", (Value ?? "").ToString().ToLowerInvariant());

                var iconEl = new TagBuilder("span");
                iconEl.AddCssClass($"go-gray fa fa-{(Value ? "check" : "times")}");
                wrapper.InnerHtml.AppendHtml(iconEl);
                wrapper.InnerHtml.AppendHtml(Value ? TextTrue : TextFalse);
                output.Content.AppendHtml(wrapper);
            }
            else if (Mode == FieldRenderMode.Simple)
            {
                var iconEl = new TagBuilder("span");
                iconEl.AddCssClass($"{(Value ? "ti-check" : "go-gray")}");
                iconEl.InnerHtml.Append($"{(Value ? "" : "-")}");
                output.Content.AppendHtml(iconEl);
            }
            else if (Mode == FieldRenderMode.InlineEdit)
            {
                if (Access == FieldAccess.Full || Access == FieldAccess.FullAndCreate)
                {
                    //View
                    {
                        var viewWrapper = new TagBuilder("div");
                        viewWrapper.Attributes.Add("id", $"view-{FieldId}");
                        viewWrapper.AddCssClass("input-group view-wrapper");

                        var prependWrapper = new TagBuilder("span");
                        prependWrapper.AddCssClass("input-group-prepend");

                        var prependEl = new TagBuilder("span");
                        prependEl.AddCssClass("input-group-text");

                        var prependIcon = new TagBuilder("span");
                        prependIcon.AddCssClass($"fa fa-fw fa-{(Value ? "check" : "times")}");
                        prependEl.InnerHtml.AppendHtml(prependIcon);
                        prependWrapper.InnerHtml.AppendHtml(prependEl);
                        viewWrapper.InnerHtml.AppendHtml(prependWrapper);

                        var viewFormControlEl = new TagBuilder("div");
                        viewFormControlEl.AddCssClass($"form-control erp-checkbox {(ValidationErrors.Count > 0 ? "is-invalid" : "")}");
                        viewFormControlEl.Attributes.Add("title", "double click to edit");
                        viewFormControlEl.InnerHtml.AppendHtml(Value ? TextTrue : TextFalse);
                        viewWrapper.InnerHtml.AppendHtml(viewFormControlEl);


                        var appendEl = new TagBuilder("span");
                        appendEl.AddCssClass("input-group-append");
                        var appendButton = new TagBuilder("button");
                        appendButton.Attributes.Add("type", "button");
                        appendButton.Attributes.Add("title", "edit");
                        appendButton.AddCssClass("btn btn-secondary action");
                        var appendIcon = new TagBuilder("span");
                        appendIcon.AddCssClass("fa fa-fw fa-pencil-alt");
                        appendButton.InnerHtml.AppendHtml(appendIcon);
                        appendEl.InnerHtml.AppendHtml(appendButton);
                        viewWrapper.InnerHtml.AppendHtml(appendEl);

                        output.Content.AppendHtml(viewWrapper);
                    }

                    //Edit
                    {
                        var editWrapper = new TagBuilder("div");
                        editWrapper.Attributes.Add("id", $"edit-{FieldId}");
                        editWrapper.AddCssClass("edit-wrapper");
                        editWrapper.Attributes.Add("style", "display:none;");
                        var inputGroupEl = new TagBuilder("div");
                        inputGroupEl.AddCssClass("input-group erp-checkbox");
                        var editFormControlEl = new TagBuilder("div");
                        editFormControlEl.AddCssClass("form-control erp-checkbox");
                        var editFormCheckEl = new TagBuilder("div");
                        editFormCheckEl.AddCssClass("form-check");
                        var editFormLabelEl = new TagBuilder("label");
                        editFormLabelEl.AddCssClass("form-check-label");
                        var editInputEl = new TagBuilder("input");
                        editInputEl.Attributes.Add("type", "checkbox");
                        editInputEl.AddCssClass("form-check-input");
                        if (Value)
                        {
                            editInputEl.Attributes.Add("checked", "checked");
                        }
                        editInputEl.Attributes.Add("value", "true");
                        editFormLabelEl.InnerHtml.AppendHtml(editInputEl);
                        editFormLabelEl.InnerHtml.AppendHtml(Value ? TextTrue : TextFalse);
                        editFormCheckEl.InnerHtml.AppendHtml(editFormLabelEl);
                        editFormControlEl.InnerHtml.AppendHtml(editFormCheckEl);
                        inputGroupEl.InnerHtml.AppendHtml(editFormControlEl);

                        var editInputAppend = new TagBuilder("span");
                        editInputAppend.AddCssClass("input-group-append");
                        var editSaveBtn = new TagBuilder("button");
                        editSaveBtn.Attributes.Add("type", "submit");
                        editSaveBtn.AddCssClass("btn btn-secondary save");
                        editSaveBtn.Attributes.Add("title", "Save");
                        var editSaveIcon = new TagBuilder("span");
                        editSaveIcon.AddCssClass("fa fa-fw fa-check go-green");
                        editSaveBtn.InnerHtml.AppendHtml(editSaveIcon);
                        editInputAppend.InnerHtml.AppendHtml(editSaveBtn);

                        var editCancelBtn = new TagBuilder("button");
                        editCancelBtn.Attributes.Add("type", "submit");
                        editCancelBtn.AddCssClass("btn btn-secondary cancel");
                        editCancelBtn.Attributes.Add("title", "Cancel");
                        var editCancelIcon = new TagBuilder("span");
                        editCancelIcon.AddCssClass("fa fa-fw fa-times go-gray");
                        editCancelBtn.InnerHtml.AppendHtml(editCancelIcon);
                        editInputAppend.InnerHtml.AppendHtml(editCancelBtn);

                        inputGroupEl.InnerHtml.AppendHtml(editInputAppend);
                        editWrapper.InnerHtml.AppendHtml(inputGroupEl);
                        output.Content.AppendHtml(editWrapper);



                        var jsCompressor = new JavaScriptCompressor();
                        #region << Init Scripts >>
                        var tagHelperInitialized = false;
                        if (ViewContext.HttpContext.Items.ContainsKey(typeof(WvFieldCheckbox) + "-inline-edit"))
                        {
                            var tagHelperContext = (WvTagHelperContext)ViewContext.HttpContext.Items[typeof(WvFieldCheckbox) + "-inline-edit"];
                            tagHelperInitialized = tagHelperContext.Initialized;
                        }
                        if (!tagHelperInitialized)
                        {
                            var scriptContent = FileService.GetEmbeddedTextResource("inline-edit.js", "WebVella.Erp.Web.TagHelpers.WvFieldCheckbox");
                            var scriptEl      = new TagBuilder("script");
                            scriptEl.Attributes.Add("type", "text/javascript");
                            scriptEl.InnerHtml.AppendHtml(jsCompressor.Compress(scriptContent));
                            output.PostContent.AppendHtml(scriptEl);

                            ViewContext.HttpContext.Items[typeof(WvFieldCheckbox) + "-inline-edit"] = new WvTagHelperContext()
                            {
                                Initialized = true
                            };
                        }
                        #endregion

                        #region << Add Inline Init Script for this instance >>
                        var initScript = new TagBuilder("script");
                        initScript.Attributes.Add("type", "text/javascript");
                        var scriptTemplate = @"
						$(function(){
							CheckboxInlineEditInit(""{{FieldId}}"",""{{Name}}"",""{{EntityName}}"",""{{RecordId}}"",{{ConfigJson}});
						});"                        ;
                        scriptTemplate = scriptTemplate.Replace("{{FieldId}}", (FieldId ?? null).ToString());
                        scriptTemplate = scriptTemplate.Replace("{{Name}}", Name);
                        scriptTemplate = scriptTemplate.Replace("{{EntityName}}", EntityName);
                        scriptTemplate = scriptTemplate.Replace("{{RecordId}}", (RecordId ?? null).ToString());

                        var fieldConfig = new WvFieldCheckboxConfig()
                        {
                            ApiUrl       = ApiUrl,
                            CanAddValues = Access == FieldAccess.FullAndCreate ? true : false,
                            TrueLabel    = TextTrue,
                            FalseLabel   = TextFalse
                        };

                        scriptTemplate = scriptTemplate.Replace("{{ConfigJson}}", JsonConvert.SerializeObject(fieldConfig));

                        initScript.InnerHtml.AppendHtml(jsCompressor.Compress(scriptTemplate));

                        output.PostContent.AppendHtml(initScript);
                        #endregion
                    }
                }
                else if (Access == FieldAccess.ReadOnly)
                {
                    var divEl = new TagBuilder("div");
                    divEl.AddCssClass("input-group");

                    var prependWrapper = new TagBuilder("span");
                    prependWrapper.AddCssClass("input-group-prepend");

                    var prependEl = new TagBuilder("span");
                    prependEl.AddCssClass("input-group-text");

                    var prependIcon = new TagBuilder("span");
                    prependIcon.AddCssClass($"fa fa-fw fa-{(Value ? "check" : "times")}");
                    prependEl.InnerHtml.AppendHtml(prependIcon);
                    prependWrapper.InnerHtml.AppendHtml(prependEl);
                    divEl.InnerHtml.AppendHtml(prependWrapper);



                    var inputEl = new TagBuilder("input");
                    inputEl.AddCssClass("form-control erp-checkbox");
                    inputEl.Attributes.Add("type", "text");
                    inputEl.Attributes.Add("value", Value ? TextTrue : TextFalse);
                    inputEl.Attributes.Add("readonly", null);

                    var appendActionSpan = new TagBuilder("span");
                    appendActionSpan.AddCssClass("input-group-append");
                    appendActionSpan.AddCssClass("action");

                    var appendTextSpan = new TagBuilder("span");
                    appendTextSpan.AddCssClass("input-group-text");

                    var appendIconSpan = new TagBuilder("span");
                    appendIconSpan.AddCssClass("fa fa-fw fa-lock");

                    appendTextSpan.InnerHtml.AppendHtml(appendIconSpan);

                    appendActionSpan.InnerHtml.AppendHtml(appendTextSpan);

                    divEl.InnerHtml.AppendHtml(inputEl);
                    divEl.InnerHtml.AppendHtml(appendActionSpan);
                    output.Content.AppendHtml(divEl);
                }
            }
            #endregion



            //Finally
            if (SubInputEl != null)
            {
                output.PostContent.AppendHtml(SubInputEl);
            }

            return(Task.CompletedTask);
        }
Ejemplo n.º 2
0
        public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            if (!isVisible)
            {
                output.SuppressOutput();
                return(Task.CompletedTask);
            }
            #region << Init >>
            var initSuccess = InitField(context, output);

            if (!initSuccess)
            {
                return(Task.CompletedTask);
            }
            #endregion


            #region << Render >>
            if (Mode == WvFieldRenderMode.Form)
            {
                if (!IsButtonGroup)
                {
                    var wrapper1 = new TagBuilder("div");
                    wrapper1.AddCssClass("form-control-plaintext erp-radio-list");
                    wrapper1.Attributes.Add("id", $"input-" + FieldId);
                    foreach (var selectOption in Options)
                    {
                        var wrapper2 = new TagBuilder("div");
                        wrapper2.AddCssClass("form-check form-check-inline ml-1");
                        var labelWrapper = new TagBuilder("label");
                        labelWrapper.AddCssClass("form-check-label");

                        var inputChkb = new TagBuilder("input");
                        inputChkb.Attributes.Add("type", "radio");
                        inputChkb.Attributes.Add("value", selectOption.Value);
                        inputChkb.Attributes.Add("name", Name);
                        if (Access == WvFieldAccess.ReadOnly)
                        {
                            inputChkb.Attributes.Add("readonly", null);
                        }

                        inputChkb.AddCssClass($"form-check-input {(ValidationErrors.Count > 0 ? "is-invalid" : "")}");

                        if (Value != null && Value == selectOption.Value)
                        {
                            inputChkb.Attributes.Add("checked", "checked");
                        }
                        labelWrapper.InnerHtml.AppendHtml(inputChkb);

                        labelWrapper.InnerHtml.AppendHtml(selectOption.Label);
                        wrapper2.InnerHtml.AppendHtml(labelWrapper);
                        wrapper1.InnerHtml.AppendHtml(wrapper2);
                    }

                    output.Content.AppendHtml(wrapper1);
                }
                else
                {
                    var wrapper1 = new TagBuilder("div");
                    wrapper1.AddCssClass("form-control-plaintext erp-radio-list is-buttons");
                    wrapper1.Attributes.Add("id", $"input-" + FieldId);
                    var wrapper2 = new TagBuilder("div");
                    wrapper2.AddCssClass("btn-group btn-group-toggle");
                    foreach (var selectOption in Options)
                    {
                        var labelWrapper = new TagBuilder("label");
                        if (Value != null && Value == selectOption.Value)
                        {
                            labelWrapper.AddCssClass($"btn {ButtonClassChecked}");
                        }
                        else
                        {
                            labelWrapper.AddCssClass($"btn {ButtonClassUnchecked}");
                        }
                        var inputChkb = new TagBuilder("input");
                        inputChkb.Attributes.Add("type", "radio");
                        inputChkb.Attributes.Add("value", selectOption.Value);
                        inputChkb.Attributes.Add("name", Name);
                        if (Access == WvFieldAccess.ReadOnly)
                        {
                            inputChkb.Attributes.Add("readonly", null);
                        }
                        inputChkb.Attributes.Add("autocomplete", "off");
                        inputChkb.AddCssClass($"form-check-input {(ValidationErrors.Count > 0 ? "is-invalid" : "")}");

                        if (Value != null && Value == selectOption.Value)
                        {
                            inputChkb.Attributes.Add("checked", "checked");
                        }
                        labelWrapper.InnerHtml.AppendHtml(inputChkb);

                        labelWrapper.InnerHtml.AppendHtml(selectOption.Label);
                        wrapper2.InnerHtml.AppendHtml(labelWrapper);
                    }
                    wrapper1.InnerHtml.AppendHtml(wrapper2);
                    output.Content.AppendHtml(wrapper1);
                }

                var jsCompressor = new JavaScriptCompressor();

                #region << Init Scripts >>
                var tagHelperInitialized = false;
                var fileName             = "form.js";
                if (ViewContext.HttpContext.Items.ContainsKey(typeof(WvFieldRadioList) + fileName))
                {
                    var tagHelperContext = (WvTagHelperContext)ViewContext.HttpContext.Items[typeof(WvFieldRadioList) + fileName];
                    tagHelperInitialized = tagHelperContext.Initialized;
                }
                if (!tagHelperInitialized)
                {
                    var scriptContent = WvHelpers.GetEmbeddedTextResource(fileName, "WebVella.TagHelpers.TagHelpers.WvFieldRadioList", "WebVella.TagHelpers");
                    var scriptEl      = new TagBuilder("script");
                    scriptEl.Attributes.Add("type", "text/javascript");
                    //scriptEl.InnerHtml.AppendHtml(jsCompressor.Compress(scriptContent));
                    scriptEl.InnerHtml.AppendHtml(scriptContent);
                    output.PostContent.AppendHtml(scriptEl);

                    ViewContext.HttpContext.Items[typeof(WvFieldRadioList) + fileName] = new WvTagHelperContext()
                    {
                        Initialized = true
                    };
                }
                #endregion

                #region << Add Inline Init Script for this instance >>
                var initScript = new TagBuilder("script");
                initScript.Attributes.Add("type", "text/javascript");
                var scriptTemplate = @"
						$(function(){
							RadioListFormInit(""{{FieldId}}"",{{IsButtonGroup}},""{{ButtonClassUnchecked}}"",""{{ButtonClassChecked}}"");
						});"                        ;
                scriptTemplate = scriptTemplate.Replace("{{FieldId}}", (FieldId != null ? FieldId.Value.ToString() : ""));
                scriptTemplate = scriptTemplate.Replace("{{IsButtonGroup}}", IsButtonGroup.ToString().ToLowerInvariant());
                scriptTemplate = scriptTemplate.Replace("{{ButtonClassUnchecked}}", ButtonClassUnchecked);
                scriptTemplate = scriptTemplate.Replace("{{ButtonClassChecked}}", ButtonClassChecked);

                initScript.InnerHtml.AppendHtml(jsCompressor.Compress(scriptTemplate));

                output.PostContent.AppendHtml(initScript);
                #endregion
            }
            else if (Mode == WvFieldRenderMode.Display)
            {
                var wrapper = new TagBuilder("div");
                wrapper.Attributes.Add("id", $"input-{FieldId}");
                wrapper.AddCssClass("form-control-plaintext erp-radio-list");
                if (!String.IsNullOrWhiteSpace(Name))
                {
                    wrapper.Attributes.Add("data-field-name", Name);
                }
                wrapper.Attributes.Add("data-field-value", (Value ?? "").ToString().ToLowerInvariant());

                var selectedOption = Options.FirstOrDefault(x => x.Value == Value);
                var renderedValue  = Value;
                if (selectedOption != null)
                {
                    renderedValue = selectedOption.Label;
                }

                wrapper.InnerHtml.AppendHtml(renderedValue);
                output.Content.AppendHtml(wrapper);
            }
            else if (Mode == WvFieldRenderMode.Simple)
            {
                output.SuppressOutput();
                var selectedOption = Options.FirstOrDefault(x => x.Value == Value);
                var renderedValue  = Value;
                if (selectedOption != null)
                {
                    renderedValue = selectedOption.Label;
                }

                output.Content.AppendHtml(renderedValue);
            }
            else if (Mode == WvFieldRenderMode.InlineEdit)
            {
                if (Access == WvFieldAccess.Full || Access == WvFieldAccess.FullAndCreate)
                {
                    //View
                    {
                        var viewWrapper = new TagBuilder("div");
                        viewWrapper.Attributes.Add("id", $"view-{FieldId}");
                        viewWrapper.AddCssClass("input-group view-wrapper");


                        var viewFormControlEl = new TagBuilder("div");
                        viewFormControlEl.AddCssClass($"form-control erp-radio-list {(ValidationErrors.Count > 0 ? "is-invalid" : "")}");
                        viewFormControlEl.Attributes.Add("title", "double click to edit");

                        var selectedOption = Options.FirstOrDefault(x => x.Value == Value);
                        var renderedValue  = Value;
                        if (selectedOption != null)
                        {
                            renderedValue = selectedOption.Label;
                        }

                        viewFormControlEl.InnerHtml.AppendHtml(renderedValue);
                        viewWrapper.InnerHtml.AppendHtml(viewFormControlEl);


                        var appendEl = new TagBuilder("span");
                        appendEl.AddCssClass("input-group-append action");
                        var appendButton = new TagBuilder("button");
                        appendButton.Attributes.Add("type", "button");
                        appendButton.Attributes.Add("title", "edit");
                        appendButton.AddCssClass("btn btn-secondary");
                        var appendIcon = new TagBuilder("span");
                        appendIcon.AddCssClass("fa fa-fw fa-pencil-alt");
                        appendButton.InnerHtml.AppendHtml(appendIcon);
                        appendEl.InnerHtml.AppendHtml(appendButton);
                        viewWrapper.InnerHtml.AppendHtml(appendEl);

                        output.Content.AppendHtml(viewWrapper);
                    }

                    //Edit
                    {
                        var editWrapper = new TagBuilder("div");
                        editWrapper.Attributes.Add("id", $"edit-{FieldId}");
                        editWrapper.AddCssClass("edit-wrapper");
                        editWrapper.Attributes.Add("style", "display:none;");
                        var inputGroupEl = new TagBuilder("div");
                        inputGroupEl.AddCssClass("input-group erp-checkbox-list");
                        var editFormControlEl = new TagBuilder("div");
                        editFormControlEl.AddCssClass("form-control");
                        foreach (var selectOption in Options)
                        {
                            var editFormCheckEl = new TagBuilder("div");
                            editFormCheckEl.AddCssClass("form-check form-check-inline ml-1");
                            var editFormLabelEl = new TagBuilder("label");
                            editFormLabelEl.AddCssClass("form-check-label");

                            var editInputEl = new TagBuilder("input");
                            editInputEl.Attributes.Add("type", "radio");
                            editInputEl.Attributes.Add("value", selectOption.Value);
                            editInputEl.AddCssClass("form-check-input");
                            editInputEl.Attributes.Add("name", Name);
                            if (Value != null && Value == selectOption.Value)
                            {
                                editInputEl.Attributes.Add("checked", "checked");
                            }

                            editFormLabelEl.InnerHtml.AppendHtml(editInputEl);
                            editFormLabelEl.InnerHtml.AppendHtml(selectOption.Label);
                            editFormCheckEl.InnerHtml.AppendHtml(editFormLabelEl);
                            editFormControlEl.InnerHtml.AppendHtml(editFormCheckEl);
                        }
                        inputGroupEl.InnerHtml.AppendHtml(editFormControlEl);

                        var editInputAppend = new TagBuilder("span");
                        editInputAppend.AddCssClass("input-group-append");
                        var editSaveBtn = new TagBuilder("button");
                        editSaveBtn.Attributes.Add("type", "submit");
                        editSaveBtn.AddCssClass("btn btn-secondary save");
                        editSaveBtn.Attributes.Add("title", "Save");
                        var editSaveIcon = new TagBuilder("span");
                        editSaveIcon.AddCssClass("fa fa-fw fa-check go-green");
                        editSaveBtn.InnerHtml.AppendHtml(editSaveIcon);
                        editInputAppend.InnerHtml.AppendHtml(editSaveBtn);

                        var editCancelBtn = new TagBuilder("button");
                        editCancelBtn.Attributes.Add("type", "submit");
                        editCancelBtn.AddCssClass("btn btn-secondary cancel");
                        editCancelBtn.Attributes.Add("title", "Cancel");
                        var editCancelIcon = new TagBuilder("span");
                        editCancelIcon.AddCssClass("fa fa-fw fa-times go-gray");
                        editCancelBtn.InnerHtml.AppendHtml(editCancelIcon);
                        editInputAppend.InnerHtml.AppendHtml(editCancelBtn);

                        inputGroupEl.InnerHtml.AppendHtml(editInputAppend);
                        editWrapper.InnerHtml.AppendHtml(inputGroupEl);
                        output.Content.AppendHtml(editWrapper);



                        var jsCompressor = new JavaScriptCompressor();
                        #region << Init Scripts >>
                        var tagHelperInitialized = false;
                        if (ViewContext.HttpContext.Items.ContainsKey(typeof(WvFieldRadioList) + "-inline-edit"))
                        {
                            var tagHelperContext = (WvTagHelperContext)ViewContext.HttpContext.Items[typeof(WvFieldRadioList) + "-inline-edit"];
                            tagHelperInitialized = tagHelperContext.Initialized;
                        }
                        if (!tagHelperInitialized)
                        {
                            var scriptContent = WvHelpers.GetEmbeddedTextResource("inline-edit.js", "WebVella.TagHelpers.TagHelpers.WvFieldRadioList", "WebVella.TagHelpers");
                            var scriptEl      = new TagBuilder("script");
                            scriptEl.Attributes.Add("type", "text/javascript");
                            scriptEl.InnerHtml.AppendHtml(jsCompressor.Compress(scriptContent));
                            output.PostContent.AppendHtml(scriptEl);

                            ViewContext.HttpContext.Items[typeof(WvFieldRadioList) + "-inline-edit"] = new WvTagHelperContext()
                            {
                                Initialized = true
                            };
                        }
                        #endregion

                        #region << Add Inline Init Script for this instance >>
                        var initScript = new TagBuilder("script");
                        initScript.Attributes.Add("type", "text/javascript");
                        var scriptTemplate = @"
						$(function(){
							RadioListInlineEditInit(""{{FieldId}}"",""{{Name}}"",{{ConfigJson}});
						});"                        ;
                        scriptTemplate = scriptTemplate.Replace("{{FieldId}}", (FieldId != null ? FieldId.Value.ToString() : ""));
                        scriptTemplate = scriptTemplate.Replace("{{Name}}", Name);


                        var fieldConfig = new WvFieldCheckboxConfig()
                        {
                            ApiUrl       = ApiUrl,
                            CanAddValues = Access == WvFieldAccess.FullAndCreate ? true : false
                        };

                        scriptTemplate = scriptTemplate.Replace("{{ConfigJson}}", JsonConvert.SerializeObject(fieldConfig));

                        initScript.InnerHtml.AppendHtml(jsCompressor.Compress(scriptTemplate));

                        output.PostContent.AppendHtml(initScript);
                        #endregion
                    }
                }
                else if (Access == WvFieldAccess.ReadOnly)
                {
                    var divEl = new TagBuilder("div");
                    divEl.AddCssClass("input-group");

                    var prependWrapper = new TagBuilder("span");
                    prependWrapper.AddCssClass("input-group-prepend");

                    var prependEl = new TagBuilder("span");
                    prependEl.AddCssClass("input-group-text");

                    var prependIcon = new TagBuilder("span");
                    prependIcon.AddCssClass($"fa fa-fw fa-{(Value ? "check" : "times")}");
                    prependEl.InnerHtml.AppendHtml(prependIcon);
                    prependWrapper.InnerHtml.AppendHtml(prependEl);
                    divEl.InnerHtml.AppendHtml(prependWrapper);

                    var selectedOption = Options.FirstOrDefault(x => x.Value == Value);
                    var renderedValue  = Value;
                    if (selectedOption != null)
                    {
                        renderedValue = selectedOption.Label;
                    }

                    var inputEl = new TagBuilder("input");
                    inputEl.AddCssClass("form-control erp-radio-list");
                    inputEl.Attributes.Add("type", "text");
                    inputEl.Attributes.Add("value", renderedValue);
                    inputEl.Attributes.Add("readonly", null);

                    var appendActionSpan = new TagBuilder("span");
                    appendActionSpan.AddCssClass("input-group-append");
                    appendActionSpan.AddCssClass("action");

                    var appendTextSpan = new TagBuilder("span");
                    appendTextSpan.AddCssClass("input-group-text");

                    var appendIconSpan = new TagBuilder("span");
                    appendIconSpan.AddCssClass("fa fa-fw fa-lock");

                    appendTextSpan.InnerHtml.AppendHtml(appendIconSpan);

                    appendActionSpan.InnerHtml.AppendHtml(appendTextSpan);

                    divEl.InnerHtml.AppendHtml(inputEl);
                    divEl.InnerHtml.AppendHtml(appendActionSpan);
                    output.Content.AppendHtml(divEl);
                }
            }
            #endregion

            //Finally
            if (SubInputEl != null)
            {
                output.PostContent.AppendHtml(SubInputEl);
            }

            return(Task.CompletedTask);
        }