using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Text; using System.Web.Mvc; using Kendo.Mvc.UI; using Kendo.Mvc.UI.Fluent; namespace Kreta.Web.Helpers { public static class MaskedTextBoxExtensions { public static MaskedTextBoxBuilder KretaMaskedTextBox(this HtmlHelper helper, string name, string mask, Dictionary htmlAttributes = null) { var maskedtextbox = helper.Kendo().MaskedTextBox() .Name(name) .Mask(mask); if (htmlAttributes != null) maskedtextbox.HtmlAttributes(htmlAttributes); return maskedtextbox; } public static MaskedTextBoxBuilder KretaMaskedTextBoxFor(this HtmlHelper helper, Expression> expression, string usedMask = "", Dictionary htmlAttributes = null) { var fieldName = ExpressionHelper.GetExpressionText(expression); var fullBindingName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(fieldName); var metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData); var value = metadata.Model; if (htmlAttributes == null) htmlAttributes = new Dictionary(); var validationAttributes = helper.GetUnobtrusiveValidationAttributes(fullBindingName, metadata); foreach (var key in validationAttributes.Keys) { try { if (key == "data-val-required") { htmlAttributes.Add("data-msg-required", validationAttributes[key].ToString()); } else if (key == "data-val-regex") { htmlAttributes.Add("data-msg-pattern", validationAttributes[key].ToString()); } else if (key == "data-val-regex-pattern") { htmlAttributes.Add("data-rule-pattern", validationAttributes[key].ToString()); } else { htmlAttributes.Add(key, validationAttributes[key].ToString()); } } catch { } } if (metadata.IsRequired) { htmlAttributes.Add("data-rule-required", "true"); htmlAttributes.Add("data-labelmsg", metadata.DisplayName + " *"); } else { htmlAttributes.Add("data-labelmsg", metadata.DisplayName); } var maskedtextbox = helper.Kendo().MaskedTextBox() .Name(fullBindingName) .HtmlAttributes(htmlAttributes); if (value != null) maskedtextbox.Value(value.ToString()); maskedtextbox.Mask(usedMask); return maskedtextbox; } public static MvcHtmlString RenderSearchPanel(this MaskedTextBoxBuilder helper) { string labelMsg = ""; foreach (var item in helper.ToComponent().HtmlAttributes) { if (item.Key == "data-labelmsg" && item.Value != null) labelMsg = item.Value.ToString(); } StringBuilder sb = new StringBuilder(); sb.Append("
"); sb.Append(""); sb.Append("
"); sb.Append(helper.ToHtmlString()); sb.Append("
"); return new MvcHtmlString(sb.ToString()); } public static MvcHtmlString RenderSearchPanelSideBar(this MaskedTextBoxBuilder helper) { string labelMsg = ""; foreach (var item in helper.ToComponent().HtmlAttributes) { if (item.Key == "data-labelmsg" && item.Value != null) labelMsg = item.Value.ToString(); } StringBuilder sb = new StringBuilder(); sb.Append("
"); sb.Append("
"); sb.Append(""); sb.Append("
"); sb.Append("
"); sb.Append(helper.ToHtmlString()); sb.Append("
"); sb.Append("
"); return new MvcHtmlString(sb.ToString()); } public static MvcHtmlString RenderWithName(this MaskedTextBoxBuilder helper, int labelWidth = 6, int inputWidth = 6, string tooltipResource = null, bool needLabel = true) { string labelMsg = ""; foreach (var item in helper.ToComponent().HtmlAttributes) { if (item.Key == "data-labelmsg" && item.Value != null) labelMsg = item.Value.ToString(); } var sb = new StringBuilder(); if (string.IsNullOrWhiteSpace(tooltipResource)) AddRenderWithNameBeginingFrame(sb, labelWidth, inputWidth, helper.ToComponent().Name, labelMsg, string.Empty, needLabel); else AddRenderWithNameTooltipBeginingFrame(sb, labelWidth, inputWidth, helper.ToComponent().Name, labelMsg, string.Empty, tooltipResource, needLabel); sb.Append(helper.ToHtmlString()); AddRenderWithNameCloseingFrame(sb); return new MvcHtmlString(sb.ToString()); } public static MvcHtmlString RenderWithName(this MaskedTextBoxBuilder helper, string label, int labelWidth = 6, int inputWidth = 6, string tooltipResource = null) { var sb = new StringBuilder(); if (string.IsNullOrWhiteSpace(tooltipResource)) AddRenderWithNameBeginingFrame(sb, labelWidth, inputWidth, helper.ToComponent().Name, label, string.Empty); else AddRenderWithNameTooltipBeginingFrame(sb, labelWidth, inputWidth, helper.ToComponent().Name, label, string.Empty, tooltipResource); sb.Append(helper.ToHtmlString()); AddRenderWithNameCloseingFrame(sb); return new MvcHtmlString(sb.ToString()); } public static MvcHtmlString RenderWithoutName(this MaskedTextBoxBuilder helper, int inputWidth = 6, string tooltipResource = null) { return RenderWithName(helper, 1, inputWidth, tooltipResource, false); } private static void AddRenderWithNameBeginingFrame(StringBuilder sb, int labelWidth, int inputWidth, string controlName, string labelMsg, string customClass, bool needLabel = true) { if (needLabel) { sb.AppendFormat("
", BootsrapHelper.GetSizeClasses(labelWidth), customClass); sb.AppendFormat("", controlName, labelMsg); sb.Append("
"); } sb.AppendFormat("
", BootsrapHelper.GetSizeClasses(inputWidth), customClass); } private static void AddRenderWithNameTooltipBeginingFrame(StringBuilder sb, int labelWidth, int inputWidth, string controlName, string labelMsg, string customClass, string tooltipResource, bool needLabel = true) { sb.AppendFormat("
", BootsrapHelper.GetSizeClasses(labelWidth), customClass); if (needLabel) { sb.AppendFormat(""); sb.Append("
"); } sb.AppendFormat("
", BootsrapHelper.GetSizeClasses(inputWidth), customClass); } private static void AddRenderWithNameCloseingFrame(StringBuilder sb) { sb.Append("
"); } } }