using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Text; using System.Text.RegularExpressions; using System.Web.Mvc; using System.Web.Mvc.Html; using System.Web.Routing; using Kreta.Core; using Kreta.Framework; using Kreta.Resources; using Kreta.Web.Classes; using Kreta.Web.Helpers.Error; namespace Kreta.Web.Helpers { public static class SelectorExtensions { public static MvcHtmlString KretaSelectorFor(this HtmlHelper html, Expression> expression, List list, bool allowRemoveSelected = true, string clickFunctionName = "", bool preventClickEventOnDocumentReady = false) { ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); string htmlFieldName = ExpressionHelper.GetExpressionText(expression); var value = metadata.Model; StringBuilder sb = new StringBuilder(); sb.Append("
"); sb.Append("
"); sb.Append("
    "); foreach (var item in list) { sb.Append("
  • "); sb.Append("
    ").Append(item.Text).Append("
    "); sb.Append("
  • "); } sb.Append("
"); sb.Append("
"); sb.Append("
"); sb.Append(""); sb.Append("
"); StringBuilder scriptSb = new StringBuilder(); scriptSb.Append(""); StringBuilder scriptIISb = new StringBuilder(); if (allowRemoveSelected) { scriptIISb.Append(@""); } else { scriptIISb.Append(@""); } StringBuilder result = new StringBuilder(); result.Append(scriptIISb); result.Append(sb); result.Append(scriptSb); return new MvcHtmlString(result.ToString()); } public static MvcHtmlString RenderWithNameForSelector(this MvcHtmlString helper, int labelWidth = 6, int inputWidth = 6, bool allSizeSame = false) { StringBuilder sb = new StringBuilder(); string labelMsg = null; var str = helper.ToString(); MatchCollection matches = Regex.Matches(str, @"data-labelmsg='(.*)' "); foreach (Match match in matches) { labelMsg = match.Groups[1].Value; } string labelName = null; MatchCollection matches2 = Regex.Matches(str.Replace('"', '@'), @"name=@(.*)@ "); foreach (Match match in matches2) { labelName = match.Groups[1].Value; } if (labelMsg == null || labelName == null) { throw new StatusError(500, ErrorResource.HibaTortentAzOldalonAzAdatokBetoltesekor) { UnHandledException = new Exception(ErrorResource.DOMHiba) }; } AddRenderWithNameBeginingFrame(sb, labelWidth, inputWidth, allSizeSame, labelName, labelMsg, string.Empty); sb.Append(helper.ToHtmlString()); AddRenderWithNameCloseingFrame(sb); return new MvcHtmlString(sb.ToString()); } private static void AddRenderWithNameBeginingFrame(StringBuilder sb, int labelWidth, int inputWidth, bool allSizeSame, string controlName, string labelMsg, string customClass) { sb.AppendFormat("
", BootsrapHelper.GetSizeClasses(labelWidth, allSizeSame), customClass); sb.AppendFormat("", controlName, labelMsg); sb.AppendFormat("
", BootsrapHelper.GetSizeClasses(inputWidth, allSizeSame), customClass); } private static void AddRenderWithNameCloseingFrame(StringBuilder sb) { sb.Append("
"); } public static MvcHtmlString KretaSelectorForGrid(this HtmlHelper html, string htmlFieldName, string name, string value, Expression> expression, List list, bool hasTooltip = false, string customClickFunctionName = null) { ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); var controlStringBuilder = new StringBuilder(); controlStringBuilder.Append($"
"); controlStringBuilder.Append("
"); controlStringBuilder.Append("
    "); foreach (ExtendedSelectListItem item in list) { string tooltip = null; if (hasTooltip) { if (!string.IsNullOrWhiteSpace(item.Tooltip)) { tooltip = item.Tooltip; } else if (int.TryParse(item.Value, out var itemValue) && itemValue.IsEntityId()) { tooltip = StringResourcesUtil.GetString(itemValue); } } controlStringBuilder.Append(!string.IsNullOrWhiteSpace(tooltip) ? $"
  • " : $"
  • "); controlStringBuilder.Append($"
    {item.Text}
    "); controlStringBuilder.Append("
  • "); } controlStringBuilder.Append("
"); controlStringBuilder.Append("
"); controlStringBuilder.Append("", htmlFieldName, name); controlStringBuilder.Append("
"); controlStringBuilder.Append("
"); var scriptStringBuilder = new StringBuilder(); scriptStringBuilder.Append(""); var result = new StringBuilder(); result.Append(controlStringBuilder); result.Append(scriptStringBuilder); return new MvcHtmlString(result.ToString()); } } }