public static string MenuItem(this HtmlHelper helper, string linkText, string actionName, string controllerName, string area)
        {
            if (Roles.IsUserInRole(ROLES.admin.ToString())
                || controllerName.Equals("Home")
                || controllerName.Equals("AccountTransactions")
                || controllerName.Equals("Message"))
            {

                var currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
                var currentActionName = (string)helper.ViewContext.RouteData.Values["action"];

                var builder = new TagBuilder("li");

                builder.AddCssClass("ui-state-default ui-corner-top");

                // Add selected class
                if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase))
                    builder.AddCssClass("ui-state-active");

                // Add link
                builder.InnerHtml = helper.ActionLink(linkText, actionName, controllerName, new { area = area }, null).ToHtmlString();

                // Render Tag Builder
                return builder.ToString(TagRenderMode.Normal);
            }
            return String.Empty;
        }
Example #2
0
        public MvcHtmlString Render()
        {
            var container = new TagBuilder("div");
            container.AddCssClass("flash-holder");

            if (!string.IsNullOrWhiteSpace(Message))
            {
                var flash = new TagBuilder("div");

                switch (Priority)
                {
                    case FlashPriority.General:
                        flash.AddCssClass("general");
                        break;
                    case FlashPriority.Success:
                        flash.AddCssClass("success");
                        break;
                    case FlashPriority.Error:
                        flash.AddCssClass("error");
                        break;
                }

                flash.SetInnerText(Message);
                container.InnerHtml = flash.ToString();
            }

            return MvcHtmlString.Create(container.ToString()); 
        }
Example #3
0
        /// <summary>
        /// Emits a stylized status message.
        /// </summary>
        /// <param name="messageType">The type of message being displayed, determines the style to be used.</param>
        /// <param name="messageFormat">The general style and format of the message text.</param>
        /// <param name="messageText">Text or html of the message.</param>
        /// <param name="htmlAttributes">Additional html attributes for the outer message container.</param>
        public static MvcHtmlString StatusMessage(this HtmlHelper htmlHelper, StatusMessageType messageType = StatusMessageType.Success, StatusMessageFormat messageFormat = StatusMessageFormat.BoldCenter, string messageText = null, object htmlAttributes = null)
        {
            // required for legacy webform pages
            if (htmlHelper == null)
                return MvcHtmlString.Empty;

            var tempData = htmlHelper.ViewContext.TempData;

            if (string.IsNullOrEmpty(messageText))
            {
                messageText = (string)tempData["StatusMessageText"];
            }

            if (string.IsNullOrEmpty(messageText))
                return MvcHtmlString.Empty;

            // if dictionary contains keys for format and type use appropriate StatusMessage overload
            if (tempData["StatusMessageFormat"] != null)
            {
                messageFormat = (StatusMessageFormat)tempData["StatusMessageFormat"];
            }
            if (tempData["StatusMessageType"] != null)
            {
                messageType = (StatusMessageType)tempData["StatusMessageType"];
            }

            var innerDiv = new TagBuilder("div") { InnerHtml = messageText };
            innerDiv.AddCssClass("divStatusMessage");

            switch (messageFormat)
            {
                case StatusMessageFormat.BoldCenter:
                    innerDiv.AddCssClass("divStatusFormatBoldCenter");
                    break;
                case StatusMessageFormat.NormalBlock:
                    innerDiv.AddCssClass("divStatusFormatNormalBlock");
                    break;
            }

            var outerDiv = new TagBuilder("div") { InnerHtml = innerDiv.ToString() };

            var attribs = htmlAttributes == null ? new RouteValueDictionary() : new RouteValueDictionary(htmlAttributes);
            outerDiv.MergeAttributes(attribs);
            outerDiv.AddCssClass("divStatusContainer");

            switch (messageType)
            {
                case StatusMessageType.Success:
                    outerDiv.AddCssClass("divStatusSuccess");
                    break;
                case StatusMessageType.Warning:
                    outerDiv.AddCssClass("divStatusWarning");
                    break;
                case StatusMessageType.Error:
                    outerDiv.AddCssClass("divStatusError");
                    break;
            }

            return MvcHtmlString.Create( outerDiv.ToString() );
        }
Example #4
0
        /// <summary>
        ///   Renders the div with formgroup class with some html controls inside
        /// </summary>
        /// <returns></returns>
        public string ToHtmlString()
        {
            var formGroup = new TagBuilder("div");
            formGroup.AddCssClass("form-group");

            if (!_fieldIsValid)
                formGroup.AddCssClass("error");

            switch (_type)
            {
                case FormGroupType.TextBoxLike:

                    formGroup.InnerHtml = _label + _input.ToHtmlString();
                    break;

                case FormGroupType.CheckBoxLike:

                    formGroup.InnerHtml = _label.ToHtmlString();
                    break;

                default:
                    break;
            }

            return formGroup.ToString();
        }
        protected string GetSortHeaderContent(IGridColumn column)
        {
            var sortTitle = new TagBuilder("div");
            sortTitle.AddCssClass("grid-header-title");

            if (column.SortEnabled)
            {
                var columnHeaderLink = new TagBuilder("a")
                    {
                        InnerHtml = column.Title
                    };
                string url = GetSortUrl(column.Name, column.Direction);
                columnHeaderLink.Attributes.Add("href", url);
                sortTitle.InnerHtml += columnHeaderLink.ToString();
            }
            else
            {
                var columnTitle = new TagBuilder("span")
                    {
                        InnerHtml = column.Title
                    };
                sortTitle.InnerHtml += columnTitle.ToString();
            }

            if (column.IsSorted)
            {
                sortTitle.AddCssClass("sorted");
                sortTitle.AddCssClass(column.Direction == GridSortDirection.Ascending ? "sorted-asc" : "sorted-desc");

                var sortArrow = new TagBuilder("span");
                sortArrow.AddCssClass("grid-sort-arrow");
                sortTitle.InnerHtml += sortArrow.ToString();
            }
            return sortTitle.ToString();
        }
        public static MvcHtmlString PageLinks(this HtmlHelper html,
                                                PagingInfo pagingInfo,
                                                Func<int, string> pageUrl)
        {
            var result = new StringBuilder();

            for (int i = 1; i <= pagingInfo.TotalPages; i++)
            {
                var tag = new TagBuilder("a");
                tag.MergeAttribute("href", pageUrl(i));
                // Func<int, string>
                // int here is just the input type, 1 parameter
                // string is what is returned.
                // <a href="computedFunc pageUrl">

                tag.InnerHtml = i.ToString();
                //i

                if (i == pagingInfo.CurrentPage)
                {
                    tag.AddCssClass("selected");
                    tag.AddCssClass("btn-primary");
                }
                tag.AddCssClass("btn btn-default");
                result.Append(tag.ToString());
            }

            return MvcHtmlString.Create(result.ToString());
        }
        public static MvcHtmlString AjaxLinkModalWindow(
            this HtmlHelper htmlHelper,
            string linkText,
            string targetUrl,
            string modalId,
            string targetId,
            string cssClass,
            string iconClass,
            string dataGet)
        {
            var builder = new TagBuilder("a");
            builder.SetInnerText(" " + linkText);
            builder.Attributes.Add("href", "#");
            builder.Attributes.Add("data-target-url", targetUrl);
            builder.Attributes.Add("data-target-id", targetId);
            builder.Attributes.Add("data-modal-id", modalId);
            builder.Attributes.Add("data-get", dataGet);
            builder.AddCssClass("ajax-link-modal-window");
            builder.AddCssClass(cssClass);
            var iconBuilder = new TagBuilder("i");
            iconBuilder.AddCssClass(iconClass);
            builder.InnerHtml += iconBuilder.ToString();

            return new MvcHtmlString(builder.ToString());
        }
Example #8
0
        public static MvcHtmlString CreateElement(this HtmlHelper htmlHelper)
        {
            var allHtml = new TagBuilder("span");

            for (int i = 1; i < 6; i++)
            {
                var divBuilder = new TagBuilder("div");
                var divTwoBuilder = new TagBuilder("div");
                var spanBuilder = new TagBuilder("span");
                var iBuilder = new TagBuilder("i");

                if (i == 5) divBuilder.AddCssClass("cssload-last-finger");
                else divBuilder.AddCssClass("cssload-finger cssload-finger-" + i);

                if (i == 5) divTwoBuilder.AddCssClass("cssload-last-finger-item");
                else divTwoBuilder.AddCssClass("cssload-finger-item");

                divTwoBuilder.InnerHtml += spanBuilder.ToString() + iBuilder.ToString();
                divBuilder.InnerHtml += divTwoBuilder.ToString();

                allHtml.InnerHtml += divBuilder;
            }

            return new MvcHtmlString(allHtml.ToString());
        }
Example #9
0
        public static MvcHtmlString PageLinks(this HtmlHelper html, Paginacao paginacao, Func<int, string> paginaUrl)
        {

            StringBuilder resultadoStringBuilder = new StringBuilder();

            for (int i = 1; i <= paginacao.TotalDePaginas; i++)
            {
                TagBuilder tagBuilder = new TagBuilder("a");

                tagBuilder.MergeAttribute("href", paginaUrl(i));
                tagBuilder.InnerHtml = i.ToString();

                if (i == paginacao.PaginaAtual)
                {
                    tagBuilder.AddCssClass("selected");
                    tagBuilder.AddCssClass("btn-primary");
                }

                tagBuilder.AddCssClass("btn btn-default");
                resultadoStringBuilder.Append(tagBuilder);

            }

            return MvcHtmlString.Create(resultadoStringBuilder.ToString());

        }
Example #10
0
 public static MvcHtmlString LangSwitcher(this UrlHelper url, string Name, RouteData routeData, string lang, string imageUrl)
 {
     var liTagBuilder = new TagBuilder("li");
     var aTagBuilder = new TagBuilder("a");
     var imgTagBuilder = new TagBuilder("img");
     var routeValueDictionary = new RouteValueDictionary(routeData.Values);
     if (routeValueDictionary.ContainsKey("lang"))
     {
         if (routeData.Values["lang"] as string == lang)
         {
             liTagBuilder.AddCssClass("active");
         }
         else
         {
             routeValueDictionary["lang"] = lang;
         }
     }
     aTagBuilder.MergeAttribute("href", url.RouteUrl(routeValueDictionary));
     liTagBuilder.AddCssClass(lang);
     imgTagBuilder.MergeAttribute("src", imageUrl);
     imgTagBuilder.MergeAttribute("alt", Name);
     imgTagBuilder.MergeAttribute("title", Name);
     //aTagBuilder.SetInnerText(Name);
     aTagBuilder.InnerHtml = imgTagBuilder.ToString();
     liTagBuilder.InnerHtml = aTagBuilder.ToString();
     return new MvcHtmlString(liTagBuilder.ToString());
 }
Example #11
0
 public static MvcHtmlString MenuItem(
     this HtmlHelper htmlHelper,
     string text,
     string action,
     string controller,
     string liCssClass = null
 )
 {
     var li = new TagBuilder("li");
     if (!String.IsNullOrEmpty(liCssClass))
     {
         li.AddCssClass(liCssClass);
     }
     var routeData = htmlHelper.ViewContext.RouteData;
     var currentAction = routeData.GetRequiredString("action");
     var currentController = routeData.GetRequiredString("controller");
     if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) &&
         string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
     {
         li.AddCssClass("active");
     }
     li.InnerHtml = String.Format("<a href=\"{0}\"><i class=\"glyphicon glyphicon-chevron-right\"></i>{1}</a>",
        new UrlHelper(htmlHelper.ViewContext.RequestContext).Action(action, controller).ToString()
         ,text);
     return MvcHtmlString.Create(li.ToString());
 }
Example #12
0
        public static MvcHtmlString BootstrapTextbox(this HtmlHelper htmlHelper, MvcHtmlString htmlTextBox, string prepend, string append)
        {
            TagBuilder builder = new TagBuilder("div");

            if (!string.IsNullOrEmpty(prepend))
            {
                builder.AddCssClass("input-prepend");
                TagBuilder span = new TagBuilder("span");
                span.AddCssClass("add-on");
                span.InnerHtml += prepend;
                builder.InnerHtml += span;
            }

            builder.InnerHtml += htmlTextBox;

            if (!string.IsNullOrEmpty(append))
            {
                builder.AddCssClass("input-append");
                TagBuilder span = new TagBuilder("span");
                span.AddCssClass("add-on");
                span.InnerHtml += append;
                builder.InnerHtml += span;
            }

            return MvcHtmlString.Create(builder.ToString());
        }
        public static MvcHtmlString CustomValidationSummary(this HtmlHelper htmlHelper, bool excludePropertyErrors, string message, IDictionary<string, object> htmlAttributes)
        {
            MvcHtmlString originalValidation = ValidationExtensions.ValidationSummary(htmlHelper, excludePropertyErrors, message, htmlAttributes);

            StringBuilder divAlertMessageErrorContainer = new StringBuilder();

            TagBuilder divAlertMessageError = new TagBuilder("div");

            divAlertMessageError.AddCssClass("validation-summary-valid");
            divAlertMessageError.AddCssClass("alert-message");
            divAlertMessageError.AddCssClass("block-message");
            divAlertMessageError.AddCssClass("error");
            divAlertMessageError.MergeAttribute("data-valmsg-summary", "true");
            divAlertMessageError.MergeAttribute("data-alert", "alert");

            TagBuilder hrefClose = new TagBuilder("a");

            hrefClose.AddCssClass("close");
            hrefClose.InnerHtml = "&times;";

            TagBuilder pSummaryContainer = new TagBuilder("p");

            pSummaryContainer.InnerHtml = originalValidation.ToString();

            divAlertMessageErrorContainer.Append(hrefClose);
            divAlertMessageErrorContainer.Append(pSummaryContainer);

            divAlertMessageError.InnerHtml = divAlertMessageErrorContainer.ToString();

            return divAlertMessageError.ToMvcHtmlString(TagRenderMode.Normal);
        } 
Example #14
0
 private static MvcHtmlString CreateMenuItem(HtmlHelper htmlHelper, string text,
     bool? isActive,
     string liCssClass,
     string url,
     string glyphicon)
 {
     if (!isActive.HasValue)
     {
         var uri = new Uri(url, UriKind.RelativeOrAbsolute);
         if (!uri.IsAbsoluteUri)
             uri = new Uri(htmlHelper.ViewContext.HttpContext.Request.Url, uri);
         isActive = htmlHelper.ViewContext.HttpContext.Request.Url.AbsolutePath
             .Equals(uri.AbsolutePath, StringComparison.OrdinalIgnoreCase);
     }
     var li = new TagBuilder("li");
     if (!String.IsNullOrEmpty(liCssClass))
     {
         li.AddCssClass(liCssClass);
     }
     if (isActive.Value)
     {
         li.AddCssClass("active");
     }
     li.InnerHtml = "<a href=\"{0}\"><i class=\"glyphicon {1}\"></i>{2}</a>"
         .FormatWith(url, glyphicon, text);
     return MvcHtmlString.Create(li.ToString());
 }
        public string ToHtmlString()
        {
            TagBuilder controlGroup = new TagBuilder("div");
            controlGroup.AddCssClass("control-group");
            if (!_fieldIsValid) controlGroup.AddCssClass("error");

            TagBuilder controls = new TagBuilder("div");
            controls.AddCssClass("controls");

            switch (_type)
            {
                case ControlGroupType.textboxLike:
                    controls.InnerHtml = _input;
                    controlGroup.InnerHtml = _label + controls.ToString();
                    break;
                case ControlGroupType.checkboxLike:
                    controls.InnerHtml = _label;
                    controlGroup.InnerHtml = controls.ToString();
                    break;
                default:
                    break;
            }

            return controlGroup.ToString();
        }
Example #16
0
        public static MvcHtmlString PageLinks(this HtmlHelper html, 
            PagingInfo pagingInfo, 
            Func<int, string> pageUrl)
        {
            var result = new StringBuilder();

            for (int i = 0; i < pagingInfo.TotalPages; i++)
            {
                var pageNumber = i + 1;
                //build anchor
                var tag = new TagBuilder("a");
                //build the out goin url
                tag.MergeAttribute("href", pageUrl(pageNumber));
                tag.InnerHtml = pageNumber.ToString();
                if (pageNumber == pagingInfo.CurrentPage)
                {
                    //add bootstrap style
                    tag.AddCssClass("selected");
                    tag.AddCssClass("btn-primary");
                }
                else
                {
                    tag.AddCssClass("btn-default");
                }
                tag.AddCssClass("btn");

                result.Append(tag);
            }

            return MvcHtmlString.Create(result.ToString());
        }
        /// <summary>
        /// Gets flash messages partial view
        /// </summary>
        /// <param name="htmlHelper">The HTML helper.</param>
        /// <param name="dismissible">If set to <c>true</c>, renders flash messages as dismissible.</param>
        /// <returns>Flash messages partial view</returns>
        public static MvcHtmlString FlashMessages(this HtmlHelper htmlHelper, bool dismissible = false)
        {
            var stringBuilder = new StringBuilder();
            var flashList = GetFlashListFromTempData(htmlHelper);
            foreach (Flash flash in flashList)
            {
                var tagBuilder = new TagBuilder("div");
                tagBuilder.MergeAttribute("role", "alert");
                tagBuilder.AddCssClass("alert");
                tagBuilder.AddCssClass($"alert-{flash.Severity}");

                if (dismissible)
                {
                    tagBuilder.AddCssClass("alert-dismissible");
                    tagBuilder.InnerHtml =
                        "<button type=\"button\" class=\"close\" " +
                        "data-dismiss=\"alert\" aria-label=\"Close\">"+
                        "<span aria-hidden=\"true\">&times;</span></button>";
                }

                tagBuilder.InnerHtml += $"<span>{flash.Message}</span>";

                stringBuilder.AppendLine(tagBuilder.ToString());
            }

            flashList.Clear();

            return MvcHtmlString.Create(stringBuilder.ToString());
        }
        public static MvcHtmlString CopyButton(this HtmlHelper helper, string name, string actionName,
                                                 string controllerName, object routeValues,
                                                 object htmlAttributes)
        {
            var buttonBuilder = new TagBuilder("button");
            buttonBuilder.SetInnerText(name);
            buttonBuilder.AddCssClass("btn");
            buttonBuilder.AddCssClass("btn-success");
            buttonBuilder.Attributes.Add("id", "copyButton");

            var iBuilder = new TagBuilder("i");
            iBuilder.AddCssClass("icon-camera");
            iBuilder.AddCssClass("icon-white");
            buttonBuilder.InnerHtml = Environment.NewLine + iBuilder + Environment.NewLine + buttonBuilder.InnerHtml;

            var formBuilder = new TagBuilder("form");

            var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);

            var url = urlHelper.Action(actionName, controllerName, routeValues);

            url = QuerystringHelper.PropagateModal(url);

            formBuilder.Attributes.Add("action", url);
            formBuilder.Attributes.Add("method", "POST");
            formBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
            formBuilder.InnerHtml = Environment.NewLine + buttonBuilder;

            return new MvcHtmlString(formBuilder.ToString());
        }
Example #19
0
 public static MvcHtmlString MenuItem(this HtmlHelper htmlHelper, string text, string action, string controller, int? categoryId = null, string cssClasses = null)
 {
     var li = new TagBuilder("li");
     var routeData = htmlHelper.ViewContext.RouteData;
     var currentAction = routeData.GetRequiredString("action");
     var currentController = routeData.GetRequiredString("controller");
     if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) &&
         string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
     {
         li.AddCssClass("active");
     }
     if (!string.IsNullOrEmpty(cssClasses))
     {
         li.AddCssClass(cssClasses);
     }
     if (categoryId != null)
     {
         li.InnerHtml = htmlHelper.ActionLink(text, action, controller,new { id = categoryId.Value },new {}).ToHtmlString();
     }
     else
     {
         li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString();
     }
     return MvcHtmlString.Create(li.ToString());
 }
        public static string PageExpander(this HtmlHelper htmlHelper, Node node, Node activeNode)
        {
            UrlHelper urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);

            if (node.ChildNodes.Count > 0)
            {
                TagBuilder expanderImage = new TagBuilder("img");

                if (node.Level < 1 || (node.IsInPath(activeNode)))
                {
                    expanderImage.AddCssClass("children-visible");
                    expanderImage.Attributes.Add("src", urlHelper.Content("~/manager/Content/Images/collapse.png"));
                }
                else
                {
                    expanderImage.AddCssClass("children-hidden");
                    expanderImage.Attributes.Add("src", urlHelper.Content("~/manager/Content/Images/expand.png"));
                }
                expanderImage.Attributes.Add("alt", "toggle");
                return expanderImage.ToString();
            }
            else
            {
                TagBuilder expanderSpan = new TagBuilder("span");
                string className = "no-children";
                expanderSpan.AddCssClass(className);
                return expanderSpan.ToString();
            }
        }
Example #21
0
        public static MvcHtmlString Result(this HtmlHelper html, string testName, bool isPassed, int result, int amountOfQuestions, int amountOfCorrectQuestions)
        {
            TagBuilder p = new TagBuilder("p");
            string innerText = "Тест \"" + testName + "\" ";
            TagBuilder span = new TagBuilder("span");
            if (isPassed)
            {
                span.AddCssClass("passed");
                span.InnerHtml = "успешно пройден!";
            }
            else
            {
                span.AddCssClass("failed");
                span.InnerHtml = "не пройден!";
            }

            innerText += span.ToString(TagRenderMode.Normal);

            p.InnerHtml = innerText;

            TagBuilder pRes = new TagBuilder("p");
            pRes.InnerHtml = "Правильных ответов: " + amountOfCorrectQuestions + "/" + amountOfQuestions + "(" + result + "%)";
            string res = p.ToString() + pRes.ToString();

            return MvcHtmlString.Create(res);
        }
Example #22
0
 public Panel(HtmlHelper helper, string templateName, params string[] classNames)
 {
     _helper = helper;
     _templateName = templateName;
     ViewContext context = helper.ViewContext;
     _builder = new TagBuilder("div");
     if (classNames == null || classNames.Length == 0)
     {
         classNames = new[] { "widget" };
     }
     var includeWidget = false;
     foreach (var cls in classNames)
     {
         if (cls == "widget")
         {
             includeWidget = true;
         }
         _builder.AddCssClass(cls);
     }
     if (!includeWidget)
     {
         _builder.AddCssClass("widget");
     }
     context.Writer.Write(_builder.ToString(TagRenderMode.StartTag));
     _context = context;
 }
Example #23
0
        public override string ToHtmlString()
        {
            string innerText = Text ?? string.Empty;
            string fullName = Name;
            string tagName = TagName.HasValue() ? TagName.ToLower() : "span";

            var tagBuilder = new TagBuilder(tagName);
            if (Encode)
                tagBuilder.SetInnerText(innerText);
            else
                tagBuilder.InnerHtml = innerText;

            tagBuilder.MergeAttributes(HtmlAttributes);

            if (fullName.HasValue())
                tagBuilder.GenerateId(fullName);

            foreach (string cssClass in CssClasses)
                tagBuilder.AddCssClass(cssClass);

            if (CanWrite())
            {
                if (GrantedClass.HasValue())
                    tagBuilder.AddCssClass(GrantedClass);
            }
            else
            {
                if (DeniedClass.HasValue())
                    tagBuilder.AddCssClass(DeniedClass);
            }

            return tagBuilder.ToString(TagRenderMode.Normal);
        }
Example #24
0
        public string ToHtmlString()
        {
            TagBuilder buttonTag = new TagBuilder(Tag.ToString());

            buttonTag.AddCssClass("k-button k-button-icontext td-grid-button");
            if (CssClass.HasValue())
                buttonTag.AddCssClass(CssClass.Trim());

            if (Name.HasValue())
            {
                buttonTag.MergeAttribute("name", Name);
                buttonTag.GenerateId(Name);
            }

            if (Title.HasValue())
                buttonTag.MergeAttribute("title", Title);

            if (Tag == ButtonTag.a)
                buttonTag.MergeAttribute("href", Url.HasValue() ? Url : "javascript: void(0)");

            if (HtmlAttributes.Count > 0)
                buttonTag.MergeAttributes(HtmlAttributes);

            var imageTag = new TagBuilder("span");
            imageTag.AddCssClass("k-icon td-grid-button-image");
            if (ImageCssClass.HasValue())
                imageTag.AddCssClass(ImageCssClass);

            buttonTag.InnerHtml = imageTag.ToString();

            return buttonTag.ToString();
        }
        public static MvcHtmlString SaveButton(this HtmlHelper helper)
        {
            var buttonBuilder = new TagBuilder("button");
            buttonBuilder.SetInnerText(Cult.SysTexts.Save);
            buttonBuilder.AddCssClass("btn");
            buttonBuilder.AddCssClass("btn-primary");
            buttonBuilder.Attributes.Add("type", "submit");
            buttonBuilder.Attributes.Add("id", "saveButton");

            var iBuilder = new TagBuilder("i");
            iBuilder.AddCssClass("icon-download-alt");
            iBuilder.AddCssClass("icon-white");
            buttonBuilder.InnerHtml = Environment.NewLine + iBuilder + Environment.NewLine + buttonBuilder.InnerHtml;

            var totHtml = buttonBuilder.ToString();

            var inputBuilder = new TagBuilder("input");
            inputBuilder.Attributes.Add("type", "hidden");
            inputBuilder.Attributes.Add("id", "UrlHash");
            inputBuilder.Attributes.Add("name", "UrlHash");

            var modelEdit = helper.ViewData.Model as ViewModelBase;

            inputBuilder.Attributes.Add("value", modelEdit != null ? modelEdit.UrlHash : "");

            totHtml += inputBuilder.ToString();

            return new MvcHtmlString(totHtml);
        }
Example #26
0
        public static MvcHtmlString GetAlerts(this HtmlHelper helper, AlertType alertType, AlertLocation alertLocation)
        {
            var alertData = helper.ViewContext.TempData.InitializeAlertData();

            List<string> messages = alertData[alertLocation][alertType];
            if (messages.Count > 0)
            {
                var outerBuilder = new TagBuilder("div");
                outerBuilder.AddCssClass("container-fluid");
                foreach (var message in messages)
                {
                    var builder = new TagBuilder("div");
                    builder.AddCssClass("alert");
                    builder.AddCssClass("in");
                    builder.AddCssClass("fade");
                    builder.AddCssClass(alertType.GetDescription());

                    builder.SetInnerText(message);

                    var closeButton = new TagBuilder("a");
                    closeButton.AddCssClass("close");
                    closeButton.MergeAttribute("data-dismiss", "alert");
                    closeButton.MergeAttribute("href", "#");
                    closeButton.InnerHtml += "&times;";

                    builder.InnerHtml += closeButton.ToString(TagRenderMode.Normal);

                    outerBuilder.InnerHtml += builder.ToString(TagRenderMode.Normal);
                }
                return outerBuilder.ToString(TagRenderMode.Normal).ToMvcHtmlString();
            }

            return string.Empty.ToMvcHtmlString();
        }
        public static MvcHtmlString BootstrapAlert(this HtmlHelper htmlHelper, string message, string title = "", string startText = "", bool withClose = false, BootstrapStateType stateType = BootstrapStateType.common)
        {
            var tagErrorContainer = new TagBuilder("div");
            tagErrorContainer.AddCssClass("alert");
            if(stateType != BootstrapStateType.common)
                tagErrorContainer.AddCssClass("alert-" + stateType.ToString());

            if (withClose)
            {
                var tagButton = new TagBuilder("button");
                tagButton.AddCssClass("close");
                tagButton.MergeAttribute("data-dismiss", "alert");
                tagButton.InnerHtml = "x";
                tagErrorContainer.InnerHtml += tagButton.ToString(TagRenderMode.Normal);
            }

            if (!string.IsNullOrEmpty(title))
            {
                var tagHead = new TagBuilder("h4");
                tagHead.InnerHtml = title;
                tagErrorContainer.InnerHtml += tagHead.ToString(TagRenderMode.Normal);
            }

            if (!string.IsNullOrEmpty(startText))
            {
                var tagStartText = new TagBuilder("strong");
                tagStartText.InnerHtml = startText;
                tagErrorContainer.InnerHtml += tagStartText.ToString(TagRenderMode.Normal);
            }

            tagErrorContainer.InnerHtml += message;

            return new MvcHtmlString(tagErrorContainer.ToString(TagRenderMode.Normal));
        }
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            string menuUrl = _UrlHelper.Action(ActionName, ControllerName);

            output.TagName = "";

            var a = new TagBuilder("a");

            a.MergeAttribute("href", $"{menuUrl}");
            a.MergeAttribute("class", "item");

            a.InnerHtml.Append(MenuText);

            var routeData = ViewContext.RouteData.Values;
            var currentController = routeData["controller"];
            var currentAction = routeData["action"];

            if (String.Equals(ActionName, currentAction as string, StringComparison.OrdinalIgnoreCase)
                && String.Equals(ControllerName, currentController as string, StringComparison.OrdinalIgnoreCase))
            {
                a.AddCssClass("active");
                a.AddCssClass("blue");
            }

            output.Content.SetContent(a);

        }
Example #29
0
        public static MvcHtmlString PageLinks(this HtmlHelper html, PageInfo pageInfo, Func<int, string> pageUrl)
        {
            StringBuilder result = new StringBuilder();

            for (int i = 1; i <= pageInfo.TotalPages; i++)
            {
                TagBuilder tag = new TagBuilder("a");
                tag.MergeAttribute("href", pageUrl(i));
                tag.MergeAttribute("data-ajax-update", "#address-cursor-rows");
                tag.MergeAttribute("data-ajax-success", "OnSuccess");
                tag.MergeAttribute("data-ajax-mode", "replace");
                tag.MergeAttribute("data-ajax", "true");
                tag.InnerHtml = i.ToString();

                // если текущая страница, то выделяем ее, например, добавляя класс
                if (i == pageInfo.PageNumber)
                {
                    tag.AddCssClass("selected");
                    tag.AddCssClass("btn-primary");
                }
                tag.AddCssClass("btn btn-default");

                result.Append(tag.ToString());
            }

            return MvcHtmlString.Create(result.ToString());
        }
 public static MvcHtmlString NavigationListItemRouteLink(this HtmlHelper html, NamedRoute route)
 {
     var li = new TagBuilder("li")
         {
             InnerHtml = html.RouteLink(route.DisplayName, route.Name).ToString()
         };
     
     if (CurrentRouteMatchesName(html, route.Name))
     {
         li.AddCssClass("active");
     }
     if (route.Children.Count() > 0)
     {
         //TODO: create a UL of child routes here.
         li.AddCssClass("dropdown");
         li.InnerHtml = "<a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">" + route.DisplayName +"<b class=\"caret\"></b></a>";
         var ul = new TagBuilder("ul");
         ul.AddCssClass("dropdown-menu");
         
         foreach (var child in route.Children)
         {
             var childLi = new TagBuilder("li");
             childLi.InnerHtml = html.RouteLink(child.DisplayName, child.Name).ToString();
             ul.InnerHtml += childLi.ToString();
         }
         //that would mean we need to make some quick
         
         li.InnerHtml = "<a href='#' class='dropdown-toggle' data-toggle='dropdown'>"+route.DisplayName + " <b class='caret'></b></a>" + ul.ToString();
         
     }
     return MvcHtmlString.Create(li.ToString(TagRenderMode.Normal));
 }
Example #31
0
        public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func <int, string> pageUrl)
        {
            StringBuilder result = new StringBuilder();

            if (pagingInfo.CurrentPage != 1)
            {
                result.Append("<li><a href='" + pageUrl(pagingInfo.CurrentPage - 1) + "'>&laquo;</a></li>");
            }
            else
            {
                result.Append("<li><a href='#'>&laquo;</a></li>");
            }
            for (int i = 1; i <= pagingInfo.TotalPages; i++)
            {
                TagBuilder lis = new TagBuilder("li");
                TagBuilder tag = new TagBuilder("a");
                tag.MergeAttribute("href", pageUrl(i));
                tag.InnerHtml = i.ToString();
                lis.InnerHtml = tag.ToString();
                if (i == pagingInfo.CurrentPage)
                {
                    lis.AddCssClass("active");
                }

                result.Append(lis.ToString());
            }
            if (pagingInfo.CurrentPage != pagingInfo.TotalPages)
            {
                result.Append("<li><a href='" + pageUrl(pagingInfo.CurrentPage + 1) + "'>&raquo;</a></li>");
            }
            else
            {
                result.Append("<li><a href='#'>&raquo;</a></li>");
            }
            return(MvcHtmlString.Create(result.ToString()));
        }
Example #32
0
        /// <summary>
        /// Returns a span element containing the localized value of Display description attribute
        /// </summary>
        public static MvcHtmlString BsDescriptionFor <TModel, TProperty>(this HtmlHelper <TModel> helper,
                                                                         Expression <Func <TModel, TProperty> > expression, IDictionary <string, object> htmlAttributes)
        {
            var metaData = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);

            if (!string.IsNullOrEmpty(metaData.Description))
            {
                //create span element
                var tag = new TagBuilder("span");
                tag.MergeAttributes(htmlAttributes, false);

                //add bootstrap glyphicon & tooltip
                tag.AddCssClass("input-group-addon glyphicon glyphicon-info-sign");
                tag.Attributes.Add("data-toggle", "tooltip");
                tag.Attributes.Add("title", metaData.Description);

                //build span html element
                var returnTag = new StringBuilder(tag.ToString(TagRenderMode.StartTag));
                returnTag.Append(tag.ToString(TagRenderMode.EndTag));
                return(MvcHtmlString.Create(returnTag.ToString()));
            }

            return(MvcHtmlString.Create(string.Empty));
        }
        /// <summary>
        /// Renders a bootstrap standard pagination bar
        /// </summary>
        /// <remarks>
        /// http://twitter.github.com/bootstrap/components.html#pagination
        /// </remarks>
        /// <param name="helper">The html helper</param>
        /// <param name="currentPage">Zero-based page number of the page on which the pagination bar should be rendered</param>
        /// <param name="totalPages">The total number of pages</param>
        /// <param name="pageUrl">
        ///     Expression to construct page url (e.g.: x => Url.Action("Index", new {page = x}))
        /// </param>
        /// <param name="additionalPagerCssClass">Additional classes for the navigation div (e.g. "pagination-right pagination-mini")</param>
        /// <returns></returns>
        public static MvcHtmlString Pager(this HtmlHelper helper, int currentPage, int totalPages,
                                          Func <int, string> pageUrl, string additionalPagerCssClass = "")
        {
            if (totalPages <= 1)
            {
                return(MvcHtmlString.Empty);
            }

            var div = new TagBuilder("div");

            div.AddCssClass("pagination");
            div.AddCssClass(additionalPagerCssClass);

            var ul = new TagBuilder("ul");

            for (var i = 1; i < totalPages + 1; i++)
            {
                var li = new TagBuilder("li");
                if (i == (currentPage + 1))
                {
                    li.AddCssClass("active");
                }

                var a = new TagBuilder("a");
                a.MergeAttribute("href", pageUrl(i));
                a.SetInnerText(i.ToString());

                li.InnerHtml = a.ToString();

                ul.InnerHtml += li;
            }

            div.InnerHtml = ul.ToString();

            return(MvcHtmlString.Create(div.ToString()));
        }
Example #34
0
        public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func <int, string> pageUrl, bool isAdmin = false)
        {
            StringBuilder builder = new StringBuilder();

            for (int i = 1; i <= pagingInfo.TotalPage; i++)
            {
                if (!isAdmin)
                {
                    TagBuilder li  = new TagBuilder("li");
                    TagBuilder tag = new TagBuilder("a");
                    tag.MergeAttribute("href", pageUrl(i));
                    tag.InnerHtml = i + "";
                    if (i == pagingInfo.CurrentPage)
                    {
                        li.AddCssClass("active");
                    }
                    li.InnerHtml = tag.ToString(TagRenderMode.Normal);
                    builder.Append(li.ToString());
                }
                else
                {
                    TagBuilder tag = new TagBuilder("a");
                    tag.MergeAttribute("href", pageUrl(i));
                    tag.InnerHtml = i + "";
                    if (i == pagingInfo.CurrentPage)
                    {
                        tag.AddCssClass("selected");
                        tag.AddCssClass("btn-primary");
                    }
                    tag.AddCssClass("btn btn-default");
                    builder.Append(tag.ToString());
                }
            }

            return(MvcHtmlString.Create(builder.ToString()));
        }
        public static HtmlString LabelRequiredFor <TModel, TValue>(this IHtmlHelper <TModel> html, Expression <Func <TModel, TValue> > expression, IDictionary <string, object> htmlAttributes,
                                                                   string requiredSymbol = " *", string requiredCssClass = "editor-field-required")
        {
            var metadata      = ExpressionMetadataProvider.FromLambdaExpression(expression, html.ViewData, html.MetadataProvider);
            var htmlFieldName = ExpressionHelper.GetExpressionText(expression);
            var labelText     = metadata.Metadata.DisplayName ?? metadata.Metadata.PropertyName ?? htmlFieldName.Split('.').Last();

            if (String.IsNullOrEmpty(labelText))
            {
                return(HtmlString.Empty);
            }

            var sb2 = new StringBuilder();
            var tag = new TagBuilder("label");

            tag.MergeAttributes(htmlAttributes);
            tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName));

            if (metadata.Metadata.IsRequired)
            {
                var sb       = new StringBuilder();
                var required = new TagBuilder("span");
                required.AddCssClass(requiredCssClass);
                required.InnerHtml.AppendHtml(requiredSymbol);
                sb.Append(required.GetString());

                tag.InnerHtml.AppendHtml(new HtmlString(labelText));
                tag.InnerHtml.AppendHtml(new HtmlString(sb.ToString()));
            }
            else
            {
                tag.InnerHtml.AppendHtml(new HtmlString(labelText));
            }
            sb2.Append(tag.GetString());
            return(new HtmlString(sb2.ToString()));
        }
Example #36
0
        /// <summary>
        /// Creates a reference to the sprite / inlined version of the desired image including special attributes.
        /// </summary>
        /// <param name="virtualPath">The relative path of the image to be displayed</param>
        /// <param name="htmlAttributes">Html Attributes of IDictionary form</param>
        /// <returns>Image tag.</returns>
        public static IHtmlString Image(string virtualPath, IDictionary <string, object> htmlAttributes)
        {
            ImageOptimizations.EnsureInitialized();

            TagBuilder htmlTag = new TagBuilder("img");

            htmlTag.MergeAttributes(htmlAttributes);

            HttpContextBase httpContext = new HttpContextWrapper(HttpContext.Current);

            string localSpriteDirectory = Path.GetDirectoryName(httpContext.Server.MapPath(virtualPath));

            if (ImageOptimizations.LinkCompatibleCssFileName(httpContext.Request.Browser, localSpriteDirectory) == null)
            {
                htmlTag.MergeAttribute("src", ResolveUrl(virtualPath));
                return(new HtmlString(htmlTag.ToString(TagRenderMode.SelfClosing)));
            }
            else
            {
                htmlTag.AddCssClass(ImageOptimizations.MakeCssClassName(virtualPath));
                htmlTag.MergeAttribute("src", ResolveUrl(ImageOptimizations.GetBlankImageSource(httpContext.Request.Browser)));
                return(new HtmlString(htmlTag.ToString(TagRenderMode.SelfClosing)));
            }
        }
Example #37
0
        /// <summary>
        /// Montar link que deve abrir modal para registro de pagamento diretamente a partir de um título.
        /// </summary>
        public static MvcHtmlString linkRegistrarPagamentoTitulo(this HtmlHelper helper, int idTituloReceita, string textoLink, string cssClass = "", string icon = "")
        {
            var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);

            var linkHref = urlHelper.Action("modal-registrar-pagamento", "ReceitaBaixa", new { area = "Financeiro", id = idTituloReceita });

            TagBuilder htmlLink = new TagBuilder("a");

            htmlLink.Attributes.Add("href", "javascript:void(0);");

            htmlLink.Attributes.Add("onclick", "ReceitaBaixa.modalRegistrarPagamento(this);");

            htmlLink.Attributes.Add("data-url", linkHref);

            htmlLink.Attributes.Add("data-id", idTituloReceita.ToString());

            htmlLink.Attributes.Add("data-toggle", "tooltip");

            htmlLink.Attributes.Add("title", "Registrar Pagamento");

            if (!string.IsNullOrEmpty(cssClass))
            {
                htmlLink.AddCssClass(cssClass);
            }

            if (!icon.isEmpty())
            {
                htmlLink.InnerHtml += $"<i class=\"{icon}\"></i> ";
            }

            htmlLink.InnerHtml += textoLink;

            string finalHtml = htmlLink.ToString();

            return(new MvcHtmlString(finalHtml));
        }
Example #38
0
        public static MvcHtmlString TextBox <TModel, TProperty>(this HtmlHelper <TModel> self, Expression <Func <TModel, TProperty> > expression, int size)
        {
            //var divTag = new TagBuilder("div");
            //divTag.AddCssClass("form-group");

            //Récupérations des helpers standard

            var label = self.LabelFor(expression, new { @class = string.Format("col-sm-{0} control-label", size) });

            var input = self.TextBoxFor(expression, new { @class = "form-control" });

            var valid = self.ValidationMessageFor(expression, "", new { @class = "text-danger" });

            //Construction des balises
            // Le <div> Externe

            var divTag = new TagBuilder("div");

            divTag.AddCssClass("form-group");

            // Le div interne

            var divInnerTag = new TagBuilder("div");

            divInnerTag.AddCssClass(string.Format("col-sm-{0}", 12 - size));

            // Contenu de ce <div> interne
            divInnerTag.InnerHtml = input.ToString() + valid.ToString();

            divTag.InnerHtml = label.ToString() + divInnerTag.ToString();

            //divTag.InnerHtml = label.ToString();


            return(new MvcHtmlString(divTag.ToString()));
        }
Example #39
0
        public static MvcHtmlString ButtonCadastro(this HtmlHelper html, string action, string descricao, object htmlAttribute)
        {
            var btn          = new TagBuilder("a");
            var icon         = new TagBuilder("i");
            var desc         = new TagBuilder("i");
            var htmlAtributo = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttribute);


            icon.AddCssClass("glyphicon glyphicon-plus-sign");
            desc.AddCssClass("desc-btn");
            desc.InnerHtml += descricao;

            btn.InnerHtml += icon.ToString();
            btn.InnerHtml += desc.ToString();

            foreach (var prop in htmlAtributo)
            {
                btn.Attributes.Add(prop.Key, prop.Value.ToString());
            }

            btn.AddCssClass("btn btn-default  btn-xs");
            btn.Attributes.Add("href", action);
            return(MvcHtmlString.Create(btn.ToString()));
        }
Example #40
0
        private TagBuilder Next(IUrlHelper urlHelper)
        {
            var targetPageNumber = this.List.PageNumber + 1;
            var next             = new TagBuilder("a");

            foreach (var @class in this.Options.AhrefElementClasses)
            {
                next.AddCssClass(@class);
            }

            next.InnerHtml.AppendHtml(string.Format(this.Options.LinkToNextPageFormat, targetPageNumber));
            next.Attributes["rel"] = "next";

            if (!this.List.HasNextPage)
            {
                next.Attributes["tabindex"] = "-1";

                return(WrapInListItem(next, this.Options.DisabledElementClasses.ToArray()));
            }

            next.Attributes["href"] = this.GeneratePageUrl(targetPageNumber, urlHelper);

            return(WrapInListItem(next));
        }
Example #41
0
        protected virtual async Task <string> GetLabelAsHtmlAsync(TagHelperContext context, TagHelperOutput output, TagHelperOutput inputTag, bool isCheckbox)
        {
            if (IsOutputHidden(inputTag) || TagHelper.SuppressLabel)
            {
                return(string.Empty);
            }

            if (string.IsNullOrEmpty(TagHelper.Label))
            {
                return(await GetLabelAsHtmlUsingTagHelperAsync(context, output, isCheckbox) + GetRequiredSymbol(context, output));
            }

            var label = new TagBuilder("label");

            label.Attributes.Add("for", GetIdAttributeValue(inputTag));
            label.InnerHtml.AppendHtml(TagHelper.Label);

            if (isCheckbox)
            {
                label.AddCssClass("custom-control-label");
            }

            return(label.ToHtmlString());
        }
Example #42
0
        public static MvcHtmlString Pager(this HtmlHelper html, PageingInfo pagingInfo)
        {
            //sayfa sayıyısını bulduk
            int totalPage = (int)Math.Ceiling((decimal)pagingInfo.TotalItems / pagingInfo.ItemsPerPage);


            StringBuilder stringBuilder = new StringBuilder();

            for (int i = 1; i <= totalPage; i++)
            {
                var tagBuilder = new TagBuilder("a");
                tagBuilder.MergeAttribute("href", String.Format("/Product/Index/?page={0}&category={1}", i, pagingInfo.CurrentCategory));
                tagBuilder.InnerHtml = i.ToString();

                if (pagingInfo.CurrentPage == i)
                {
                    tagBuilder.AddCssClass("selected");
                }

                stringBuilder.Append(tagBuilder);
            }

            return(MvcHtmlString.Create(stringBuilder.ToString()));
        }
Example #43
0
        /// <summary>
        ///     Returns a button thet runs the folowing expresion on clink: "model = {PageSize: model.PageSize, Page:1}", clearing the search criteria
        /// </summary>
        /// <param name="html"></param>
        /// <param name="label"></param>
        /// <param name="attributes"></param>
        /// <returns></returns>
        public static IHtmlString ClearSearchCiteriaButton(this HtmlHelper html, string label = "Clear Search Criteria", IDictionary <string, object> attributes = null)
        {
            List <Right> rights = html.GetRights();

            if (rights == null ||
                html.IsEditMode() && !rights.Any(r => r != null && r.Edit) ||
                !html.IsEditMode() && !rights.Any(r => r != null && r.Create))
            {
                return(null);
            }

            var tb = new TagBuilder("button");

            tb.AttributesFromDic(attributes);

            tb.AddCssClass("btn btn-primary");
            if (!tb.Attributes.ContainsKey("ng-click"))
            {
                tb.Attributes.Add("ng-click", "model = {PageSize: model.PageSize, Page:1, ShowAllOrders: 'true'}");
            }
            tb.InnerHtml = label;

            return(new MvcHtmlString(tb.ToString()));
        }
Example #44
0
        public static MvcHtmlString GlyphLink(this HtmlHelper htmlHelper,
                                              string controller, string action, string text, string glyphicon,
                                              string cssClasses = "", string id = "",
                                              Dictionary <string, string> attributes = null)
        {
            //declare a span for the glyphicon
            var glyph = string.Format("<span class = 'glyphicon glyphicon-{0}'></span>",
                                      glyphicon);

            // declare the anchor tag
            var anchor = new TagBuilder("a");

            if (controller.Length > 0)
            {
                anchor.MergeAttribute("href", string.Format("/{0}/{1}/",
                                                            controller, action));
            }
            else
            {
                anchor.MergeAttribute("href", "#");
            }

            if (attributes != null)
            {
                foreach (var attribute in attributes)
                {
                    anchor.MergeAttribute(attribute.Key, attribute.Value);
                }
            }

            anchor.InnerHtml = string.Format("{0} {1}", glyph, text);
            anchor.AddCssClass(cssClasses);
            anchor.GenerateId(id);

            return(MvcHtmlString.Create(anchor.ToString(TagRenderMode.Normal)));
        }
Example #45
0
        private TagBuilder Previous(IUrlHelper urlHelper)
        {
            var targetPageNumber = this.List.PageNumber - 1;
            var previous         = new TagBuilder("a");

            foreach (var @class in this.Options.AhrefElementClasses)
            {
                previous.AddCssClass(@class);
            }

            previous.InnerHtml.AppendHtml(string.Format(this.Options.LinkToPreviousPageFormat, targetPageNumber));
            previous.Attributes["rel"] = "prev";

            if (!this.List.HasPreviousPage)
            {
                previous.Attributes["tabindex"] = "-1";

                return(WrapInListItem(previous, this.Options.DisabledElementClasses.ToArray()));
            }

            previous.Attributes["href"] = this.GeneratePageUrl(targetPageNumber, urlHelper);

            return(WrapInListItem(previous));
        }
Example #46
0
        public static MvcHtmlString IconButtonCr(this HtmlHelper helper, string id, string text, string buttonCssClass, string iconCssClass, string script)
        {
            TagBuilder ButtonBuilder = new TagBuilder("a");

            if (id.HasValue())
            {
                ButtonBuilder.MergeAttribute("id", HtmlModifier.ModifyId(id));
            }

            if (text.HasValue())
            {
                ButtonBuilder.SetInnerText(text);
            }

            if (buttonCssClass.HasValue())
            {
                ButtonBuilder.AddCssClass(buttonCssClass);
            }
            else
            {
                ButtonBuilder.AddCssClass(StyleKind.Button);
            }

            TagBuilder IconBuilder = new TagBuilder("span");

            IconBuilder.AddCssClass(iconCssClass);

            ButtonBuilder.InnerHtml += IconBuilder.ToString();

            if (script.HasValue())
            {
                ButtonBuilder.InnerHtml += script;
            }

            return(MvcHtmlString.Create(ButtonBuilder.ToString()));
        }
Example #47
0
        public string RenderBsNumberPickerInline <TFormModel>(FormControlPropertyMetadata propertyMetadata, TFormModel formModel)
        {
            var controlName  = propertyMetadata.PropertyInfo.Name;
            var controlId    = GetIdAttributeFromName(controlName);
            var controlValue = propertyMetadata.PropertyInfo.GetValue(formModel);

            var textInputBuilder   = new TagBuilder("input");
            var numberInputBuilder = new TagBuilder("input");

            textInputBuilder.AddCssClass("form-control bs-number-inline bs-number-single_range_inline");
            textInputBuilder.MergeAttribute("name", controlName + ".TextValue");
            textInputBuilder.MergeAttribute("id", controlId + "_TextValue");
            textInputBuilder.MergeAttribute("type", "text");
            textInputBuilder.MergeAttribute("value", controlValue.ToString());

            numberInputBuilder.AddCssClass("bs-number-value");
            numberInputBuilder.MergeAttribute("data-for", controlName + ".TextValue");
            numberInputBuilder.MergeAttribute("name", controlName + ".ItemValue");
            numberInputBuilder.MergeAttribute("id", controlId + "_ItemValue");
            numberInputBuilder.MergeAttribute("type", "hidden");
            numberInputBuilder.MergeAttribute("value", controlValue.ToString());

            return(textInputBuilder.ToString() + numberInputBuilder.ToString());
        }
        /// <summary>
        ///     Returns an unordered list (ul element) of validation messages that utilizes bootstrap markup and styling.
        /// </summary>
        /// <param name="htmlHelper"></param>
        /// <param name="alertType">The alert type styling rule to apply to the summary element.</param>
        /// <param name="heading">The optional value for the heading of the summary element.</param>
        /// <returns></returns>
        public static IHtmlContent ValidationBootstrap(this IHtmlHelper htmlHelper, string alertType = "danger",
                                                       string heading = "")
        {
            if (htmlHelper.ViewData.ModelState.IsValid)
            {
                return(new HtmlString(string.Empty));
            }

            var div = new TagBuilder("div");

            div.AddCssClass($"alert alert-{alertType} alert-block");

            var button = new TagBuilder("button");

            button.AddCssClass("close");
            button.Attributes.Add("data-dismiss", "alert");
            button.Attributes.Add("aria-hidden", "true");
            button.InnerHtml.AppendHtml("&times;");

            div.InnerHtml.AppendHtml(button);

            if (!heading.IsEmpty())
            {
                var h4 = new TagBuilder("h4");
                h4.AddCssClass("alert-heading");
                h4.InnerHtml.Append($"<h4 class=\"alert-heading\">{heading}</h4>");

                div.InnerHtml.AppendHtml(h4);
            }

            var summary = htmlHelper.ValidationSummary();

            div.InnerHtml.AppendHtml(summary);

            return(div);
        }
Example #49
0
        private static MvcHtmlString FormText(MvcHtmlString labelContent,
                                              MvcHtmlString hintContent,
                                              MvcHtmlString fieldContent,
                                              MvcHtmlString validationMessage,
                                              MvcHtmlString anchorTag,
                                              MvcHtmlString maxLengthSpan,
                                              MvcHtmlString ariaLimitVisuallyHidden,
                                              RouteValueDictionary containerHtmlAttributes,
                                              bool validationError = false
                                              )
        {
            var container = new TagBuilder("div");

            container.MergeAttributes(containerHtmlAttributes);

            if (validationError)
            {
                container.AddCssClass(HtmlHelper.ValidationInputCssClassName);
            }

            container.InnerHtml += string.Concat(anchorTag, labelContent, hintContent, fieldContent, maxLengthSpan, ariaLimitVisuallyHidden, validationMessage);

            return(MvcHtmlString.Create(container.ToString()));
        }
Example #50
0
        /// <summary>
        /// dropdown list for changing page size (items per page)
        /// </summary>
        /// <returns></returns>
        private TagBuilder CreatePageSizeControl()
        {
            var dropDown = new TagBuilder("select");

            dropDown.AddCssClass($"form-control");
            //dropDown.Attributes.Add("name", QueryStringKeyPageSize);
            dropDown.Attributes.Add("onchange", $"{PageSizeNavOnChange}");

            for (int i = 1; i <= PageSizeNavMaxItems; i++)
            {
                var option = new TagBuilder("option");
                option.InnerHtml.AppendHtml($"{i * PageSizeNavBlockSize}");
                option.Attributes.Add("value", $"{CreateUrlTemplate(1, i * PageSizeNavBlockSize)}");

                if ((i * PageSizeNavBlockSize) == PageSize)
                {
                    option.Attributes.Add("selected", "selected");
                }

                dropDown.InnerHtml.AppendHtml(option);
            }


            var pageSizezDiv = new TagBuilder("div");

            pageSizezDiv.AddCssClass("form-inline");

            var label = new TagBuilder("label");

            label.Attributes.Add("for", "pageSizeControl");
            label.InnerHtml.AppendHtml($"{TextPageSize}&nbsp;");
            pageSizezDiv.InnerHtml.AppendHtml(label);
            pageSizezDiv.InnerHtml.AppendHtml(dropDown);

            return(pageSizezDiv);
        }
Example #51
0
        /// <summary>
        /// Gerar o link para detalhamento do titulo de receita
        /// </summary>
        public static MvcHtmlString linkDetalheTitulo(this HtmlHelper helper, int idTituloReceita, string textoLink, string cssClass = "", string icon = "")
        {
            var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);

            var linkHref = urlHelper.Action("editar", "ReceitaDetalhe", new { area = "Financeiro", id = idTituloReceita });

            TagBuilder htmlLink = new TagBuilder("a");

            htmlLink.Attributes.Add("href", linkHref);

            if (!icon.isEmpty())
            {
                htmlLink.InnerHtml = $"<i class=\"{icon}\"></i> ";
            }

            htmlLink.InnerHtml += textoLink;

            if (!string.IsNullOrEmpty(cssClass))
            {
                htmlLink.AddCssClass(cssClass);
            }

            return(new MvcHtmlString(htmlLink.ToString()));
        }
        public IHtmlString Build <TModel, TValue>(
            HtmlHelper <TModel> htmlHelper,
            Expression <Func <TModel, TValue> > expression,
            WrapperContext context)
        {
            var tagBuilder = new TagBuilder(context.Tag);

            if (!string.IsNullOrEmpty(context.Class))
            {
                tagBuilder.AddCssClass(context.Class);
            }

            if (context.HtmlAttributes != null)
            {
                foreach (var attribute in context.HtmlAttributes)
                {
                    tagBuilder.Attributes[attribute.Key] = attribute.Value.ToString();
                }
            }

            tagBuilder.InnerHtml = context.Contents.ToString();

            return(new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal)));
        }
Example #53
0
        TagBuilder CreateTag(int pageNumber, IUrlHelper urlHelper, string text)
        {
            TagBuilder item = new TagBuilder("li");
            TagBuilder link = new TagBuilder("a");

            if (pageNumber == this.PageModel.PageIndex)
            {
                item.AddCssClass("active");
            }
            else
            {
                PageUrlValues["pageIndex"] = pageNumber;
                link.Attributes["href"]    = urlHelper.Action(PageAction, PageUrlValues);
            }
            item.AddCssClass("page-item");

            link.AddCssClass("page-link");

            //  link.InnerHtml.Append(pageNumber.ToString());
            link.InnerHtml.Append(text);

            item.InnerHtml.AppendHtml(link);
            return(item);
        }
        protected TagBuilder GenerateInput(ViewContext viewContext, ModelExpression modelExpression, Localization localization = null, string type = "text")
        {
            TagBuilder tb = new TagBuilder("input");

            if (!this.IsValid(viewContext, modelExpression, localization))
            {
                tb.AddCssClass("input-validation-error");
            }

            tb.MergeAttribute("id", this.GetIdentity(modelExpression, localization));
            tb.MergeAttribute("name", this.GetIdentity(modelExpression, localization));
            tb.MergeAttribute("type", type);

            string value = this.GetValue(viewContext, modelExpression, localization);

            if (!string.IsNullOrEmpty(value))
            {
                tb.MergeAttribute("value", value);
            }

            this.HandleAttributes(tb, modelExpression);
            tb.TagRenderMode = TagRenderMode.SelfClosing;
            return(tb);
        }
Example #55
0
        //  Build level 1 sub-menu tag -------------------------------------------------------------------------------
        //
        //  <li>
        //     <a href="#" class="dropdown-toggle" data-toggle="dropdown">Title <b class="caret"></b></a>
        //     <ul class="dropdown-menu">
        //       { Level 2 menu items }
        //     </ul>
        //  </li>
        //
        protected TagBuilder BuildLevel1SubMenuTag(NavMenuNode node)
        {
            var li = new TagBuilder("li");

            var a = new TagBuilder("a");

            a.AddCssClass("dropdown-toggle");
            a.MergeAttribute("href", "#");
            a.MergeAttribute("data-toggle", "dropdown");
            a.InnerHtml.Append(node.Title);
            var b = new TagBuilder("b");

            b.AddCssClass("caret");
            a.InnerHtml.AppendHtml(b);
            li.InnerHtml.AppendHtml(a);

            var ul = new TagBuilder("ul");

            ul.AddCssClass("dropdown-menu");
            var list = nodes.Where(x => x.ParentId == node.Id).OrderBy(x => x.Order).ToList();

            foreach (var item in list)
            {
                if (item.HasChildren)
                {
                    ul.InnerHtml.AppendHtml(BuildLevel2SubMenuTag(item));
                }
                else
                {
                    ul.InnerHtml.AppendHtml(BuildMenuLinkTag(item));
                }
            }

            li.InnerHtml.AppendHtml(ul);
            return(li);
        }
Example #56
0
        //Overload para a adicionar um ícone à esquerda.
        /// <summary>
        /// Creates 'li' HTML tags with contextual styling based on the actual request, with an glyphicon to the left.
        /// </summary>
        /// <param name="htmlHelper"></param>
        /// <param name="linkText">Text to be displayed.</param>
        /// <param name="actionName">Action to point to.</param>
        /// <param name="controllerName">Controller to point to.</param>
        /// <param name="iconClass">The glyphicon icon class. Can be without the 'glyphicon' and 'glyphicon-' values. Refeer to the actual version or Bootstrap in this project for the complete list of available Glyphicon at http://getbootstrap.com/components/#glyphicons</param>
        /// <returns>Returns a HTML 'li' string with the given context.</returns>
        public static MvcHtmlString MenuLink(this System.Web.Mvc.HtmlHelper htmlHelper, string linkText, string actionName, string controllerName, string iconClass)
        {
            // Get the Action and the Controller for the actual request.
            var currentAction     = htmlHelper.ViewContext.RouteData.GetRequiredString("action");
            var currentController = htmlHelper.ViewContext.RouteData.GetRequiredString("controller");

            // Creates the icon 'span' tag.
            var icon = new TagBuilder("span");

            // Make sure it adds the icon if the user inserts all the glyphicon classes or only the name of the glyphicon.
            icon.AddCssClass("glyphicon glyphicon-" + iconClass.Replace("glyphicon glyphicon-", ""));

            // Creates the 'a' tag.
            var link = new TagBuilder("a")
            {
                InnerHtml = icon + "&nbsp;&nbsp;" + linkText // Adds two spaces between the icon and the text.
            };

            // Adds the link according to the given action and controllers parameters.
            link.Attributes.Add("href", "/" + controllerName + "/" + actionName);

            // Creates the 'li' tag.
            var li = new TagBuilder("li")
            {
                InnerHtml = link.ToString()
            };

            // Checks if the user's actual page is the point page at the <li>. If it is, put an 'active' css class to it for contextual displaying.
            // Turns all strings to lower casing to evade casing issues not setting the 'active' css correctly.
            if (controllerName.ToLower() == currentController.ToLower() && actionName.ToLower() == currentAction.ToLower())
            {
                li.AddCssClass("active");
            }

            return(new MvcHtmlString(li.ToString()));
        }
Example #57
0
        public static IHtmlContent GenerateLabel(string content, string controlId, FormTagHelper formContext)
        {
            var builder = new TagBuilder("label")
            {
                TagRenderMode = TagRenderMode.Normal
            };

            if (!string.IsNullOrEmpty(controlId))
            {
                builder.Attributes.Add("for", controlId);
            }
            if (formContext != null && formContext.Horizontal)
            {
                builder.AddCssClass("control-label");
                if (formContext.LabelWidthXs != 0)
                {
                    builder.AddCssClass("col-xs-" + formContext.LabelWidthXs);
                }
                if (formContext.LabelWidthSm != 0)
                {
                    builder.AddCssClass("col-sm-" + formContext.LabelWidthSm);
                }
                if (formContext.LabelWidthMd != 0)
                {
                    builder.AddCssClass("col-md-" + formContext.LabelWidthMd);
                }
                if (formContext.LabelWidthLg != 0)
                {
                    builder.AddCssClass("col-lg-" + formContext.LabelWidthLg);
                }
            }
            if (formContext?.LabelsSrOnly ?? false)
            {
                builder.AddCssClass("sr-only");
            }
            builder.InnerHtml.SetHtmlContent(content);
            return(builder);
        }
Example #58
0
        public static IHtmlString CartPreview(this HtmlHelper htmlHelper, HttpRequestBase request, HttpResponseBase response)
        {
            //    < div class="btn-group">
            //    <form class="p-4">
            //        <div class="dropdown-menu dropdown-menu-right p-4">
            //            <div class="row">
            //                <div class="col-md-6">Panino e panelle</div>
            //                <div class="col-md-6"><input type = "number" class="form-control" value="2" /></div>
            //            </div>
            //            <div class="dropdown-divider"></div>
            //            <div class="row">
            //                <div class="col-md-6">Coca cola</div>
            //                <div class="col-md-6"><input type = "number" class="form-control" value="2" onchange="cart_reload(1,this)" /></div>
            //            </div>
            //            <div class="dropdown-divider"></div>
            //        </div>
            //    </form>
            //</div>
            var context = new MealContext();
            var cart    = Utils.GetCart(context, request, response);
            var bd      = new StringBuilder();
            var divext  = new TagBuilder("div");

            divext.AddCssClass("btn-group");
            var form = new TagBuilder("div");

            form.Attributes.Add("style", "font-size:smaller!important;");
            form.AddCssClass("p-2");
            var divint = new TagBuilder("div");

            divint.AddCssClass("dropdown-menu dropdown-menu-right p-4");
            bd.Append(divext.ToString(TagRenderMode.StartTag));
            bd.Append(form.ToString(TagRenderMode.StartTag));
            bd.Append(divint.ToString(TagRenderMode.StartTag));
            if (cart == null || cart?.Items.Count == 0)
            {
                bd.Append("<div class=\"row\"><small>Nessun prodotto</small></div>");
            }
            else
            {
                var tb = "<table class=\"table table-borderless\">";
                tb += "<thead>";
                tb += "<tr>";
                tb += "<th scope=\"col\">Prodotto</th>";
                tb += "<th scope=\"col\">Quantità</th>";
                tb += "</tr></thead><tbody>";

                foreach (var row in cart.Items)
                {
                    tb += "<tr>";
                    tb += "<td>" + row.ItemName + "</td>";
                    tb += "<td>" + row.Quantity.ToString(CultureInfo.InvariantCulture) + "</td>";
                    tb += "</tr>";
                    //var divrow = new TagBuilder("div");
                    //divrow.AddCssClass("row");
                    //var col1 = new TagBuilder("div");
                    //col1.AddCssClass("col-md-6");
                    //col1.InnerHtml = "<small>"+row.ItemName+"</small>";
                    //var col2 = new TagBuilder("div");
                    //col2.AddCssClass("col-md-6");
                    //var input = new TagBuilder("input");
                    //input.AddCssClass("");
                    //input.Attributes.Add("type", "number");
                    //input.Attributes.Add("value", row.Quantity.ToString(CultureInfo.InvariantCulture));
                    //input.Attributes.Add("onchange", "cart_reload(" + row.CartRowId + ", this)");
                    //col2.InnerHtml = input.ToString(TagRenderMode.SelfClosing);
                    //bd.Append(divrow.ToString(TagRenderMode.StartTag));
                    //bd.Append(col1.ToString(TagRenderMode.Normal));
                    //bd.Append(col2.ToString(TagRenderMode.Normal));
                    //bd.Append(divrow.ToString(TagRenderMode.EndTag));
                }
                tb += "</tbody></table>";
                bd.Append(tb);
            }
            bd.Append(divext.ToString(TagRenderMode.EndTag));
            bd.Append(form.ToString(TagRenderMode.EndTag));
            bd.Append(divint.ToString(TagRenderMode.EndTag));
            return(MvcHtmlString.Create(bd.ToString()));
        }
Example #59
0
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            if (pagedList == null || pagedList.TotalPages < 2)
            {
                return;
            }

            var html = new StringBuilder();

            var iconPrev = new TagBuilder("i");

            iconPrev.AddCssClass("fas fa-angle-double-left");
            var aPrevious = new TagBuilder("a");

            aPrevious.AddCssClass("page-link");

            if (pagedList.HasPreviousPage)
            {
                if (string.IsNullOrEmpty(selectorReplace))
                {
                    aPrevious.MergeAttribute("onclick", actionLink);
                }
                else
                {
                    aPrevious.MergeAttribute("onclick", actionLink.Replace(selectorReplace, (pagedList.ActualPage - 1).ToString()));
                }
            }

            aPrevious.InnerHtml.SetHtmlContent(iconPrev.ToHtmlString());
            var liPrevious = new TagBuilder("li");

            liPrevious.InnerHtml.SetHtmlContent(aPrevious.ToHtmlString());
            if (!pagedList.HasPreviousPage)
            {
                liPrevious.AddCssClass("disabled");
            }
            liPrevious.AddCssClass("page-item");

            html.Append(liPrevious.ToHtmlString());

            for (int i = 1; i <= pagedList.TotalPages; i++)
            {
                TagBuilder a = new TagBuilder("a");
                a.AddCssClass("page-link");
                if (string.IsNullOrEmpty(selectorReplace))
                {
                    a.MergeAttribute("onclick", actionLink);
                }
                else
                {
                    a.MergeAttribute("onclick", actionLink.Replace(selectorReplace, i.ToString()));
                }
                a.InnerHtml.SetHtmlContent(i.ToString());
                TagBuilder li = new TagBuilder("li");
                li.AddCssClass("page-item");
                if (pagedList.ActualPage == i)
                {
                    li.AddCssClass("active");
                }
                li.InnerHtml.SetHtmlContent(a.ToHtmlString());
                html.Append(li.ToHtmlString());
            }

            var iconNext = new TagBuilder("i");

            iconNext.AddCssClass("fas fa-angle-double-right");
            var aNext = new TagBuilder("a");

            aNext.AddCssClass("page-link");

            if (pagedList.HasNextPage)
            {
                if (string.IsNullOrEmpty(selectorReplace))
                {
                    aNext.MergeAttribute("onclick", actionLink);
                }
                else
                {
                    aNext.MergeAttribute("onclick", actionLink.Replace(selectorReplace, (pagedList.ActualPage + 1).ToString()));
                }
            }
            aNext.InnerHtml.SetHtmlContent(iconNext.ToHtmlString());
            var liNext = new TagBuilder("li");

            liNext.InnerHtml.SetHtmlContent(aNext.ToHtmlString());

            if (!pagedList.HasNextPage)
            {
                liNext.AddCssClass("disabled");
            }
            liNext.AddCssClass("page-item");
            html.Append(liNext.ToHtmlString());

            var ul = new TagBuilder("ul");

            ul.AddCssClass("pagination");
            ul.InnerHtml.SetHtmlContent(html.ToString());

            output.TagName = "nav";
            output.TagMode = TagMode.StartTagAndEndTag;
            output.Content.SetHtmlContent(ul.ToHtmlString());
        }
        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);
            }

            #region << DataSource Variable >>
            if (((Value ?? "").ToString()).StartsWith("{"))
            {
                try
                {
                    DataSourceVariable = JsonConvert.DeserializeObject <DataSourceVariable>((Value ?? "").ToString(), new JsonSerializerSettings()
                    {
                        MissingMemberHandling = MissingMemberHandling.Error
                    });
                }
                catch
                {
                }
            }
            #endregion

            #region << PropertyNameLibrary>>
            if (PageId != null)
            {
                var dictionaryKey = PageId + "property-name-library";
                if (ViewContext.HttpContext.Items.ContainsKey(dictionaryKey))
                {
                    PropertyNameLibrary = (List <string>)ViewContext.HttpContext.Items[dictionaryKey];
                }
                else
                {
                    PropertyNameLibrary = PageUtils.PropertyNamesList(PageId ?? Guid.Empty);
                    ViewContext.HttpContext.Items[dictionaryKey] = PropertyNameLibrary;
                }
            }
            #endregion

            #endregion

            #region << InputGroup textbox >>
            {
                var inputGroupEl = new TagBuilder("div");
                inputGroupEl.AddCssClass("input-group");

                if (DataSourceVariable != null)
                {
                    inputGroupEl.AddCssClass("d-none");
                }

                #region << Form Control >>
                var inputEl             = new TagBuilder("input");
                var inputElCssClassList = new List <string>();
                inputElCssClassList.Add("form-control erp-datasource");
                inputEl.Attributes.Add("type", "text");
                inputEl.Attributes.Add("value", (Value ?? "").ToString());

                inputEl.Attributes.Add("id", $"input-{FieldId}");
                inputEl.Attributes.Add("name", Name);
                if (Required)
                {
                    inputEl.Attributes.Add("required", null);
                }
                if (!String.IsNullOrWhiteSpace(Placeholder))
                {
                    inputEl.Attributes.Add("placeholder", Placeholder);
                }


                if (ValidationErrors.Count > 0)
                {
                    inputElCssClassList.Add("is-invalid");
                }

                inputEl.Attributes.Add("class", String.Join(' ', inputElCssClassList));

                inputGroupEl.InnerHtml.AppendHtml(inputEl);

                #endregion

                #region << Append >>
                var igAppendEl = new TagBuilder("div");
                igAppendEl.AddCssClass("input-group-append");

                var igLinkBtnEl = new TagBuilder("button");
                igLinkBtnEl.Attributes.Add("type", "button");
                igLinkBtnEl.Attributes.Add("id", $"input-{FieldId}-create-ds-link");
                igLinkBtnEl.Attributes.Add("title", "Link option to dynamic value");
                igLinkBtnEl.AddCssClass("btn btn-white");
                var igLinkBtnIconEl = new TagBuilder("i");
                igLinkBtnIconEl.AddCssClass("fa fa-cloud-download-alt fa-fw");
                igLinkBtnEl.InnerHtml.AppendHtml(igLinkBtnIconEl);

                igAppendEl.InnerHtml.AppendHtml(igLinkBtnEl);

                inputGroupEl.InnerHtml.AppendHtml(igAppendEl);
                #endregion

                output.Content.AppendHtml(inputGroupEl);
            }
            #endregion

            #region << Datasource Selected >>
            {
                var dsInputGroupEl = new TagBuilder("div");
                dsInputGroupEl.AddCssClass("input-group");
                if (DataSourceVariable == null)
                {
                    dsInputGroupEl.AddCssClass("d-none");
                }

                #region << Form Control >>
                var divEl = new TagBuilder("div");
                divEl.AddCssClass("form-control disabled erp-text erp-linked p-0");
                divEl.Attributes.Add("id", $"input-{FieldId}-datasource");
                if (DataSourceVariable == null || DataSourceVariable.Type == DataSourceVariableType.DATASOURCE)
                {
                    divEl.AddCssClass("datasource");
                }
                else if (DataSourceVariable != null && DataSourceVariable.Type == DataSourceVariableType.CODE)
                {
                    divEl.AddCssClass("code");
                }
                else
                {
                    divEl.AddCssClass("html");
                }
                var select2ContainerEl = new TagBuilder("span");
                select2ContainerEl.AddCssClass("select2 select2-container select2-container--bootstrap4 d-block disabled");

                var select2SelectionEl = new TagBuilder("span");
                select2SelectionEl.AddCssClass("selection");

                var select2SelectionInnerEl = new TagBuilder("span");
                select2SelectionInnerEl.AddCssClass("select2-selection select2-selection--multiple");

                var select2SelectionUlEl = new TagBuilder("ul");
                select2SelectionUlEl.AddCssClass("select2-selection__rendered");
                var optionEl = new TagBuilder("li");
                optionEl.AddCssClass("select2-selection__choice");
                if (DataSourceVariable != null && DataSourceVariable.Type == DataSourceVariableType.DATASOURCE)
                {
                    optionEl.Attributes.Add("title", DataSourceVariable.String);
                }

                var optionIcon = new TagBuilder("i");

                if (DataSourceVariable == null || DataSourceVariable.Type == DataSourceVariableType.DATASOURCE)
                {
                    optionIcon.AddCssClass("fa fa-fw fa-link mr-1");
                    optionEl.InnerHtml.AppendHtml(optionIcon);
                    var textSpan = new TagBuilder("span");
                    textSpan.InnerHtml.AppendHtml(DataSourceVariable != null ? DataSourceVariable.String : "");
                    optionEl.InnerHtml.AppendHtml(textSpan);
                }
                else if (DataSourceVariable != null && DataSourceVariable.Type == DataSourceVariableType.CODE)
                {
                    optionIcon.AddCssClass("fa fa-fw fa-code mr-1");
                    optionEl.InnerHtml.AppendHtml(optionIcon);
                    var textSpan = new TagBuilder("span");
                    textSpan.InnerHtml.AppendHtml("c# code");
                    optionEl.InnerHtml.AppendHtml(textSpan);
                }
                else
                {
                    optionIcon.AddCssClass("fa fa-fw fa-code mr-1");
                    optionEl.InnerHtml.AppendHtml(optionIcon);
                    var textSpan = new TagBuilder("span");
                    textSpan.InnerHtml.AppendHtml("html");
                    optionEl.InnerHtml.AppendHtml(textSpan);
                }

                select2SelectionUlEl.InnerHtml.AppendHtml(optionEl);
                select2SelectionInnerEl.InnerHtml.AppendHtml(select2SelectionUlEl);

                select2SelectionEl.InnerHtml.AppendHtml(select2SelectionInnerEl);
                select2ContainerEl.InnerHtml.AppendHtml(select2SelectionEl);
                divEl.InnerHtml.AppendHtml(select2ContainerEl);
                dsInputGroupEl.InnerHtml.AppendHtml(divEl);
                #endregion


                #region << Append >>
                var dsAppendEl = new TagBuilder("div");
                dsAppendEl.AddCssClass("input-group-append");

                var dsRemoveBtnEl = new TagBuilder("button");
                dsRemoveBtnEl.Attributes.Add("type", "button");
                dsRemoveBtnEl.Attributes.Add("id", $"input-{FieldId}-remove-ds-link");
                dsRemoveBtnEl.AddCssClass("btn btn-white");
                var dsRemoveBtnIconEl = new TagBuilder("i");
                dsRemoveBtnIconEl.AddCssClass("fa fa-times go-red  fa-fw");
                dsRemoveBtnEl.InnerHtml.AppendHtml(dsRemoveBtnIconEl);
                dsAppendEl.InnerHtml.AppendHtml(dsRemoveBtnEl);

                var dsEditBtnEl = new TagBuilder("button");
                dsEditBtnEl.Attributes.Add("type", "button");
                dsEditBtnEl.Attributes.Add("id", $"input-{FieldId}-edit-ds-link");
                dsEditBtnEl.AddCssClass("btn btn-white");
                var dsEditBtnIconEl = new TagBuilder("i");
                dsEditBtnIconEl.AddCssClass("fa fa-pencil-alt go-orange  fa-fw");
                dsEditBtnEl.InnerHtml.AppendHtml(dsEditBtnIconEl);
                dsAppendEl.InnerHtml.AppendHtml(dsEditBtnEl);

                dsInputGroupEl.InnerHtml.AppendHtml(dsAppendEl);
                output.Content.AppendHtml(dsInputGroupEl);
                #endregion
            }
            #endregion


            #region << Modal >>
            {
                var editModalEl = new TagBuilder("div");
                editModalEl.AddCssClass("modal");
                editModalEl.Attributes.Add("id", $"modal-{FieldId}-datasource");
                editModalEl.Attributes.Add("style", "padding-right: 15px;");
                editModalEl.Attributes.Add("tabindex", "-1");
                var editModalDialog = new TagBuilder("div");
                editModalDialog.AddCssClass("modal-dialog modal-xl");
                var editModalContent = new TagBuilder("div");
                editModalContent.AddCssClass("modal-content");

                #region << Modal Header >>
                var editModalHeader = new TagBuilder("div");
                editModalHeader.AddCssClass("modal-header");
                var editModalHeaderTitle = new TagBuilder("h5");
                editModalHeaderTitle.AddCssClass("modal-title");
                editModalHeaderTitle.InnerHtml.Append("Link option to dynamic value");
                editModalHeader.InnerHtml.AppendHtml(editModalHeaderTitle);
                var editModalHeaderButton = new TagBuilder("button");
                editModalHeaderButton.Attributes.Add("type", "button");
                editModalHeaderButton.AddCssClass("close");
                editModalHeaderButton.Attributes.Add("data-dismiss", "modal");
                editModalHeaderButton.InnerHtml.AppendHtml(new TagBuilder("span").InnerHtml.AppendHtml("&times;"));
                editModalHeader.InnerHtml.AppendHtml(editModalHeaderButton);
                editModalContent.InnerHtml.AppendHtml(editModalHeader);
                #endregion

                #region << Modal Body >>
                var editModalBody = new TagBuilder("div");
                editModalBody.AddCssClass("modal-body");

                #region << Type >>
                {
                    var fieldGroupEl = new TagBuilder("div");
                    fieldGroupEl.AddCssClass("form-group wv-field");
                    var fieldLabel = new TagBuilder("label");
                    fieldLabel.AddCssClass("control-label label-stacked");
                    fieldLabel.InnerHtml.AppendHtml("Type");
                    fieldGroupEl.InnerHtml.AppendHtml(fieldLabel);

                    var fieldFormControl = new TagBuilder("div");
                    fieldFormControl.AddCssClass("form-control-plaintext erp-radio-list");

                    #region << Datasource chkb >>
                    {
                        var formCheckEl = new TagBuilder("div");
                        formCheckEl.AddCssClass("form-check form-check-inline");
                        var formCheckInput = new TagBuilder("input");
                        formCheckInput.AddCssClass("form-check-input ds-type-radio");
                        formCheckInput.Attributes.Add("type", "radio");
                        formCheckInput.Attributes.Add("id", $"modal-{FieldId}-checkbox-datasource");
                        formCheckInput.Attributes.Add("value", "0");
                        if (DataSourceVariable == null || DataSourceVariable.Type == DataSourceVariableType.DATASOURCE)
                        {
                            formCheckInput.Attributes.Add("checked", "checked");
                        }
                        formCheckEl.InnerHtml.AppendHtml(formCheckInput);
                        var formCheckLabel = new TagBuilder("label");
                        formCheckLabel.AddCssClass("form-check-label");
                        formCheckLabel.Attributes.Add("for", $"modal-{FieldId}-checkbox-datasource");
                        formCheckLabel.InnerHtml.AppendHtml("datasource");
                        formCheckEl.InnerHtml.AppendHtml(formCheckLabel);
                        fieldFormControl.InnerHtml.AppendHtml(formCheckEl);
                    }
                    #endregion

                    #region << Code chkb >>
                    {
                        var formCheckEl = new TagBuilder("div");
                        formCheckEl.AddCssClass("form-check form-check-inline");
                        var formCheckInput = new TagBuilder("input");
                        formCheckInput.AddCssClass("form-check-input ds-type-radio");
                        formCheckInput.Attributes.Add("type", "radio");
                        formCheckInput.Attributes.Add("id", $"modal-{FieldId}-checkbox-code");
                        formCheckInput.Attributes.Add("value", "1");
                        if (DataSourceVariable != null && DataSourceVariable.Type == DataSourceVariableType.CODE)
                        {
                            formCheckInput.Attributes.Add("checked", "checked");
                        }
                        formCheckEl.InnerHtml.AppendHtml(formCheckInput);
                        var formCheckLabel = new TagBuilder("label");
                        formCheckLabel.AddCssClass("form-check-label");
                        formCheckLabel.Attributes.Add("for", $"modal-{FieldId}-checkbox-code");
                        formCheckLabel.InnerHtml.AppendHtml("code");
                        formCheckEl.InnerHtml.AppendHtml(formCheckLabel);
                        fieldFormControl.InnerHtml.AppendHtml(formCheckEl);
                    }
                    #endregion

                    #region << Html chkb >>
                    {
                        var formCheckEl = new TagBuilder("div");
                        formCheckEl.AddCssClass("form-check form-check-inline");
                        var formCheckInput = new TagBuilder("input");
                        formCheckInput.AddCssClass("form-check-input ds-type-radio");
                        formCheckInput.Attributes.Add("type", "radio");
                        formCheckInput.Attributes.Add("id", $"modal-{FieldId}-checkbox-html");
                        formCheckInput.Attributes.Add("value", "2");
                        if (DataSourceVariable != null && DataSourceVariable.Type == DataSourceVariableType.HTML)
                        {
                            formCheckInput.Attributes.Add("checked", "checked");
                        }
                        formCheckEl.InnerHtml.AppendHtml(formCheckInput);
                        var formCheckLabel = new TagBuilder("label");
                        formCheckLabel.AddCssClass("form-check-label");
                        formCheckLabel.Attributes.Add("for", $"modal-{FieldId}-checkbox-html");
                        formCheckLabel.InnerHtml.AppendHtml("html");
                        formCheckEl.InnerHtml.AppendHtml(formCheckLabel);
                        fieldFormControl.InnerHtml.AppendHtml(formCheckEl);
                    }
                    #endregion
                    fieldGroupEl.InnerHtml.AppendHtml(fieldFormControl);
                    editModalBody.InnerHtml.AppendHtml(fieldGroupEl);
                }
                #endregion

                #region << Datasource >>
                {
                    var fieldGroupEl = new TagBuilder("div");
                    fieldGroupEl.AddCssClass("form-group wv-field");
                    if (DataSourceVariable != null && DataSourceVariable.Type != DataSourceVariableType.DATASOURCE)
                    {
                        fieldGroupEl.AddCssClass("d-none");
                    }
                    fieldGroupEl.Attributes.Add("id", $"modal-{FieldId}-datasource-group");
                    var fieldLabel = new TagBuilder("label");
                    fieldLabel.AddCssClass("control-label label-stacked");
                    fieldLabel.InnerHtml.AppendHtml("Value");
                    fieldGroupEl.InnerHtml.AppendHtml(fieldLabel);

                    var inputEl = new TagBuilder("input");
                    inputEl.AddCssClass("form-control erp-text");
                    inputEl.Attributes.Add("type", "text");

                    if (DataSourceVariable != null && DataSourceVariable.Type == DataSourceVariableType.DATASOURCE)
                    {
                        inputEl.Attributes.Add("value", DataSourceVariable.String);
                    }
                    else
                    {
                        inputEl.Attributes.Add("value", "");
                    }
                    fieldGroupEl.InnerHtml.AppendHtml(inputEl);

                    editModalBody.InnerHtml.AppendHtml(fieldGroupEl);
                }
                #endregion

                #region << Code >>
                {
                    var fieldGroupEl = new TagBuilder("div");
                    fieldGroupEl.AddCssClass("form-group wv-field");
                    if (DataSourceVariable == null || DataSourceVariable.Type != DataSourceVariableType.CODE)
                    {
                        fieldGroupEl.AddCssClass("d-none");
                    }
                    fieldGroupEl.Attributes.Add("id", $"modal-{FieldId}-code-group");
                    var fieldLabel = new TagBuilder("label");
                    fieldLabel.AddCssClass("control-label label-stacked");
                    fieldLabel.InnerHtml.AppendHtml("Value (templates: <a href='javascript:void(0)' class='simple-code ml-1'>simple</a>, <a href='javascript:void(0)' class='datasource-code ml-1'>data source get</a>, <a href='javascript:void(0)' class='datasource-selectoptions-code ml-1'>List&lt;EntityRecord&gt; to List&lt;SelectOptions&gt;</a>)");
                    fieldGroupEl.InnerHtml.AppendHtml(fieldLabel);

                    var editorWrapperEl     = new TagBuilder("div");
                    var wrapperCssClassList = new List <string>();
                    wrapperCssClassList.Add("form-control-plaintext erp-code");
                    if (ValidationErrors.Count > 0)
                    {
                        wrapperCssClassList.Add("is-invalid");
                    }
                    editorWrapperEl.Attributes.Add("class", String.Join(' ', wrapperCssClassList));
                    var editorWrapper = new TagBuilder("div");
                    editorWrapper.Attributes.Add("id", $"modal-{FieldId}-code-editor");
                    editorWrapper.Attributes.Add("style", $"min-height:250px");
                    editorWrapperEl.InnerHtml.AppendHtml(editorWrapper);
                    fieldGroupEl.InnerHtml.AppendHtml(editorWrapperEl);

                    var inputEl = new TagBuilder("input");
                    inputEl.Attributes.Add("type", "hidden");
                    inputEl.Attributes.Add("id", $"modal-{FieldId}-code-input");
                    if (DataSourceVariable != null && DataSourceVariable.Type == DataSourceVariableType.CODE)
                    {
                        inputEl.Attributes.Add("value", DataSourceVariable.String);
                    }
                    else
                    {
                        var defaultCode = @"using System;
using System.Collections.Generic;
using WebVella.Erp.Web.Models;
using WebVella.Erp.Api.Models;
using Newtonsoft.Json;

public class SampleCodeVariable : ICodeVariable
{
	public object Evaluate(BaseErpPageModel pageModel)
	{
		try{
			return DateTime.Now;
		}
		catch(Exception ex){
			return ""Error: "" + ex.Message;
		}
	}
}";
                        inputEl.Attributes.Add("value", defaultCode);
                    }
                    fieldGroupEl.InnerHtml.AppendHtml(inputEl);
                    editModalBody.InnerHtml.AppendHtml(fieldGroupEl);
                }
                #endregion


                #region << HTML >>
                {
                    var fieldGroupEl = new TagBuilder("div");
                    fieldGroupEl.AddCssClass("form-group wv-field");
                    if (DataSourceVariable == null || DataSourceVariable.Type != DataSourceVariableType.HTML)
                    {
                        fieldGroupEl.AddCssClass("d-none");
                    }
                    fieldGroupEl.Attributes.Add("id", $"modal-{FieldId}-html-group");
                    var fieldLabel = new TagBuilder("label");
                    fieldLabel.AddCssClass("control-label label-stacked");
                    fieldLabel.InnerHtml.AppendHtml("Value");
                    fieldGroupEl.InnerHtml.AppendHtml(fieldLabel);

                    var editorWrapperEl     = new TagBuilder("div");
                    var wrapperCssClassList = new List <string>();
                    wrapperCssClassList.Add("form-control-plaintext erp-code");
                    if (ValidationErrors.Count > 0)
                    {
                        wrapperCssClassList.Add("is-invalid");
                    }
                    editorWrapperEl.Attributes.Add("class", String.Join(' ', wrapperCssClassList));
                    var editorWrapper = new TagBuilder("div");
                    editorWrapper.Attributes.Add("id", $"modal-{FieldId}-html-editor");
                    editorWrapper.Attributes.Add("style", $"min-height:250px");
                    editorWrapperEl.InnerHtml.AppendHtml(editorWrapper);
                    fieldGroupEl.InnerHtml.AppendHtml(editorWrapperEl);

                    var inputEl = new TagBuilder("input");
                    inputEl.Attributes.Add("type", "hidden");
                    inputEl.Attributes.Add("id", $"modal-{FieldId}-html-input");
                    if (DataSourceVariable != null && DataSourceVariable.Type == DataSourceVariableType.HTML)
                    {
                        inputEl.Attributes.Add("value", DataSourceVariable.String);
                    }
                    else
                    {
                        var defaultCode = @"<div>HTML code</div>";
                        inputEl.Attributes.Add("value", defaultCode);
                    }
                    fieldGroupEl.InnerHtml.AppendHtml(inputEl);
                    editModalBody.InnerHtml.AppendHtml(fieldGroupEl);
                }
                #endregion

                #region << Default >>
                {
                    var fieldGroupEl = new TagBuilder("div");
                    fieldGroupEl.AddCssClass("form-group wv-field");
                    fieldGroupEl.Attributes.Add("id", $"modal-{FieldId}-default-group");
                    var fieldLabel = new TagBuilder("label");
                    fieldLabel.AddCssClass("control-label label-stacked");
                    fieldLabel.InnerHtml.AppendHtml("Default Value");
                    fieldGroupEl.InnerHtml.AppendHtml(fieldLabel);

                    var inputEl = new TagBuilder("input");
                    inputEl.AddCssClass("form-control erp-text");
                    inputEl.Attributes.Add("type", "text");
                    if (DataSourceVariable != null)
                    {
                        inputEl.Attributes.Add("value", DataSourceVariable.Default);
                    }
                    else
                    {
                        inputEl.Attributes.Add("value", "");
                    }
                    fieldGroupEl.InnerHtml.AppendHtml(inputEl);
                    editModalBody.InnerHtml.AppendHtml(fieldGroupEl);
                }
                #endregion


                editModalContent.InnerHtml.AppendHtml(editModalBody);
                #endregion

                #region << modal footer >>
                var editModalFooter = new TagBuilder("div");
                editModalFooter.AddCssClass("modal-footer");

                var editModalFooterTest = new TagBuilder("button");
                editModalFooterTest.Attributes.Add("type", "button");
                editModalFooterTest.AddCssClass("btn btn-secondary test btn-sm d-none");
                editModalFooterTest.Attributes.Add("style", "position: absolute;left: 10px;");
                editModalFooterTest.InnerHtml.AppendHtml("<i class='fa fa-cog'></i> test code");
                editModalFooter.InnerHtml.AppendHtml(editModalFooterTest);

                var editModalFooterSave = new TagBuilder("button");
                editModalFooterSave.Attributes.Add("type", "button");
                editModalFooterSave.AddCssClass("btn btn-green btn-sm submit");
                var editModalFooterSaveIcon = new TagBuilder("span");
                editModalFooterSaveIcon.AddCssClass("fa fa-link mr-1");
                editModalFooterSave.InnerHtml.AppendHtml(editModalFooterSaveIcon);
                editModalFooterSave.InnerHtml.AppendHtml("create link");
                editModalFooter.InnerHtml.AppendHtml(editModalFooterSave);
                var editModalFooterCancel = new TagBuilder("button");
                editModalFooterCancel.Attributes.Add("type", "button");
                editModalFooterCancel.AddCssClass("btn btn-secondary cancel btn-sm");
                editModalFooterCancel.InnerHtml.Append("cancel");
                editModalFooter.InnerHtml.AppendHtml(editModalFooterCancel);
                editModalContent.InnerHtml.AppendHtml(editModalFooter);
                #endregion


                editModalDialog.InnerHtml.AppendHtml(editModalContent);
                editModalEl.InnerHtml.AppendHtml(editModalDialog);

                output.Content.AppendHtml(editModalEl);
            }
            #endregion

            var jsCompressor = new JavaScriptCompressor();

            #region << Add Ace lib >>
            {
                var aceLibInitialized = false;
                var fileName          = "ace.js";
                if (ViewContext.HttpContext.Items.ContainsKey(typeof(WvFieldDatasource) + fileName))
                {
                    var tagHelperContext = (WvTagHelperContext)ViewContext.HttpContext.Items[typeof(WvFieldDatasource) + fileName];
                    aceLibInitialized = tagHelperContext.Initialized;
                }
                if (!aceLibInitialized)
                {
                    var scriptEl = new TagBuilder("script");
                    scriptEl.Attributes.Add("type", "text/javascript");
                    scriptEl.Attributes.Add("src", "/webvella-erp-web/lib/ace/ace.js");
                    output.Content.AppendHtml(scriptEl);

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

            #region << Add Typeahead lib >>
            {
                var aceLibInitialized = false;
                var fileName          = "bootstrap3-typeahead.js";
                if (ViewContext.HttpContext.Items.ContainsKey(typeof(WvFieldDatasource) + fileName))
                {
                    var tagHelperContext = (WvTagHelperContext)ViewContext.HttpContext.Items[typeof(WvFieldDatasource) + fileName];
                    aceLibInitialized = tagHelperContext.Initialized;
                }
                if (!aceLibInitialized)
                {
                    var scriptEl = new TagBuilder("script");
                    scriptEl.Attributes.Add("type", "text/javascript");
                    scriptEl.Attributes.Add("src", "/webvella-erp-web/lib/bootstrap-3-typeahead/bootstrap3-typeahead.min.js");
                    output.Content.AppendHtml(scriptEl);

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


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

                    ViewContext.HttpContext.Items[typeof(WvFieldDatasource) + "-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(){
							DataSourceFormEditInit(""{{FieldId}}"",{{PropertyNameCsv}});
						});"                        ;
                scriptTemplate = scriptTemplate.Replace("{{FieldId}}", (FieldId ?? null).ToString());
                scriptTemplate = scriptTemplate.Replace("{{PropertyNameCsv}}", JsonConvert.SerializeObject(PropertyNameLibrary));

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

                output.Content.AppendHtml(initScript);
            }
            #endregion



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

            return(Task.CompletedTask);
        }