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; using Kreta.Web.Security; namespace Kreta.Web.Helpers { public static class DateTimePickerExtensions { public static DateTimePickerBuilder KretaDateTimePicker(this HtmlHelper helper, string id, string className = "", bool enabled = true, string culture = "hu-HU", int interval = 1, DateTime? minValue = null, DateTime? maxValue = null, IDictionary htmlAttributes = null) { if (helper.ViewData.ModelState[id] != null && helper.ViewData.ModelState[id].Errors.Count > 0) className = string.Format("{0} input-validation-error", className); var datetimepicker = helper.Kendo().DateTimePicker() .Name(id) .Enable(enabled) .Culture(culture) .Interval(interval); if (!string.IsNullOrWhiteSpace(className) || !string.IsNullOrWhiteSpace(id)) { var attributes = new Dictionary(); if (!string.IsNullOrWhiteSpace(className)) attributes.Add("class", className.Trim()); if (!string.IsNullOrWhiteSpace(id)) attributes.Add("id", id); datetimepicker.HtmlAttributes(attributes); } if (minValue.HasValue) datetimepicker.Min(minValue.Value); if (maxValue.HasValue) datetimepicker.Max(maxValue.Value); if (htmlAttributes != null) datetimepicker.HtmlAttributes(htmlAttributes); return datetimepicker; } public static DateTimePickerBuilder KretaDateTimePickerFor(this HtmlHelper helper, Expression> expression, IDictionary 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) { if (key == "data-val-required") { htmlAttributes.Add("title", validationAttributes[key].ToString()); } } if (metadata.IsRequired) { htmlAttributes.Add("data-rule-required", "true"); //htmlAttributes.Add("title", string.Format(StringResourcesUtil.GetString(3477), metadata.DisplayName)); htmlAttributes.Add("data-labelmsg", metadata.DisplayName + " *"); } else { htmlAttributes.Add("data-labelmsg", metadata.DisplayName); } var dateTimePicker = (expression.ReturnType == typeof(DateTime)) ? helper.Kendo().DateTimePickerFor(Expression.Lambda>(expression.Body, expression.Parameters)) : helper.Kendo().DateTimePickerFor(Expression.Lambda>(expression.Body, expression.Parameters)); dateTimePicker.HtmlAttributes(htmlAttributes); if (ClaimData.LCID == 1038 /*Magyar*/) { dateTimePicker.Format("yyyy. MM. dd. HH:mm"); } return dateTimePicker; } public static MvcHtmlString RenderSearchPanel(this DateTimePickerBuilder helper, bool withMask = true) { 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("
"); if (withMask) sb.Append(""); sb.Append(""); return new MvcHtmlString(sb.ToString()); } public static MvcHtmlString RenderSearchPanelSideBar(this DateTimePickerBuilder helper, bool withMask = true) { 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("
"); if (withMask) sb.Append(""); sb.Append(""); return new MvcHtmlString(sb.ToString()); } public static MvcHtmlString RenderWithMask(this DateTimePickerBuilder helper) { var controlId = helper.ToComponent().Id; var output = new StringBuilder(); output.Append(helper.ToHtmlString()); output.Append(""); return new MvcHtmlString(output.ToString()); } public static MvcHtmlString RenderWithName(this DateTimePickerBuilder helper, int labelWidth = 6, int inputWidth = 6, bool withMask = true, string tooltipResource = null) { 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); else AddRenderWithNameTooltipBeginingFrame(sb, labelWidth, inputWidth, helper.ToComponent().Name, labelMsg, tooltipResource); sb.Append(helper.ToHtmlString()); AddRenderWithNameCloseingFrame(sb, withMask, helper.ToComponent().Name); return new MvcHtmlString(sb.ToString()); } private static void AddRenderWithNameBeginingFrame(StringBuilder sb, int labelWidth, int inputWidth, string controlName, string labelMsg) { sb.AppendFormat("
", BootsrapHelper.GetSizeClasses(labelWidth)); sb.AppendFormat("", controlName, labelMsg); sb.AppendFormat("
", BootsrapHelper.GetSizeClasses(inputWidth)); } private static void AddRenderWithNameTooltipBeginingFrame(StringBuilder sb, int labelWidth, int inputWidth, string controlName, string labelMsg, string tooltipResource) { sb.AppendFormat("
", BootsrapHelper.GetSizeClasses(labelWidth)); sb.AppendFormat(""); sb.AppendFormat("
", BootsrapHelper.GetSizeClasses(inputWidth)); } private static void AddRenderWithNameCloseingFrame(StringBuilder sb, bool withMask, string controlName) { sb.Append("
"); if (withMask) sb.AppendFormat("", controlName.Replace('.', '_')); sb.Append(""); } public static MvcHtmlString RenderWithName(this DateTimePickerBuilder helper, string label, int labelWidth = 6, int inputWidth = 6, bool withMask = true, string tooltipResource = null) { var sb = new StringBuilder(); if (string.IsNullOrWhiteSpace(tooltipResource)) AddRenderWithNameBeginingFrame(sb, labelWidth, inputWidth, helper.ToComponent().Name, label); else AddRenderWithNameTooltipBeginingFrame(sb, labelWidth, inputWidth, helper.ToComponent().Name, label, tooltipResource); sb.Append(helper.ToHtmlString()); AddRenderWithNameCloseingFrame(sb, withMask, helper.ToComponent().Name); return new MvcHtmlString(sb.ToString()); } } }