init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
257
KretaWeb/Helpers/SelectorExtensions.cs
Normal file
257
KretaWeb/Helpers/SelectorExtensions.cs
Normal file
|
@ -0,0 +1,257 @@
|
|||
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<TModel, TResult>(this HtmlHelper<TModel> html, Expression<Func<TModel, TResult>> expression, List<SelectListItem> 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("<div id=\"div").Append(htmlFieldName.Replace(".", "_")).Append("\">");
|
||||
sb.Append("<div class=\"selectorwrapper\">");
|
||||
sb.Append("<ul class=\"bars weeks\">");
|
||||
foreach (var item in list)
|
||||
{
|
||||
sb.Append("<li val=\"").Append(item.Value).Append("\" class=\"\">");
|
||||
sb.Append("<div>").Append(item.Text).Append("</div>");
|
||||
sb.Append("</li>");
|
||||
}
|
||||
|
||||
sb.Append("</ul>");
|
||||
sb.Append("<div class=\"clearfix\"></div>");
|
||||
sb.Append("</div>");
|
||||
|
||||
sb.Append("<input ");
|
||||
var attributes = Mapper.GetUnobtrusiveValidationAttributes(html, expression, null, metadata);
|
||||
|
||||
if (metadata.IsRequired)
|
||||
{
|
||||
attributes.Add("data-labelmsg", metadata.DisplayName + " *");
|
||||
}
|
||||
else
|
||||
{
|
||||
attributes.Add("data-labelmsg", metadata.DisplayName);
|
||||
}
|
||||
|
||||
foreach (var key in attributes.Keys)
|
||||
{
|
||||
sb.Append(key + "='" + attributes[key] + "' ");
|
||||
}
|
||||
|
||||
sb.Append(" type =\"hidden\" value=\"\" name=\"").Append(htmlFieldName).Append("\" id=\"").Append("").Append(htmlFieldName.Replace(".", "_")).Append("\">");
|
||||
sb.Append("</div>");
|
||||
|
||||
StringBuilder scriptSb = new StringBuilder();
|
||||
scriptSb.Append("<script>");
|
||||
scriptSb.Append("$(document).ready(function() {");
|
||||
|
||||
scriptSb.Append("$('#div").Append(htmlFieldName.Replace(".", "_")).Append("').find('.selectorwrapper > ul > li').click(function() {");
|
||||
scriptSb.Append("ElemKivalasztasa(this, '").Append(htmlFieldName.Replace(".", "_")).Append("');");
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(clickFunctionName))
|
||||
scriptSb.Append(clickFunctionName).Append("(this);");
|
||||
|
||||
scriptSb.Append("});");
|
||||
|
||||
if (!preventClickEventOnDocumentReady && value != null)
|
||||
scriptSb.Append("$('#div").Append(htmlFieldName.Replace(".", "_")).Append("').find('.selectorwrapper > ul > li[val=").Append(value).Append("]').click();");
|
||||
|
||||
scriptSb.Append("});");
|
||||
scriptSb.Append("</script>");
|
||||
|
||||
StringBuilder scriptIISb = new StringBuilder();
|
||||
if (allowRemoveSelected)
|
||||
{
|
||||
scriptIISb.Append(@"<script>
|
||||
function ElemKivalasztasa(elem, hiddenclientid) {
|
||||
var ugyanarra = $(elem).hasClass('activebar');
|
||||
$(elem).siblings('li').removeClass('activebar');
|
||||
|
||||
if (ugyanarra) {
|
||||
$(elem).removeClass('activebar');
|
||||
$('#' + hiddenclientid).val('');
|
||||
}
|
||||
else {
|
||||
$(elem).addClass('activebar');
|
||||
$('#' + hiddenclientid).val($(elem).attr('val'));
|
||||
}
|
||||
}
|
||||
</script>");
|
||||
}
|
||||
else
|
||||
{
|
||||
scriptIISb.Append(@"<script>
|
||||
function ElemKivalasztasa(elem, hiddenclientid) {
|
||||
var ugyanarra = $(elem).hasClass('activebar');
|
||||
$(elem).siblings('li').removeClass('activebar');
|
||||
|
||||
if (!ugyanarra) {
|
||||
$(elem).addClass('activebar');
|
||||
$('#' + hiddenclientid).val($(elem).attr('val'));
|
||||
}
|
||||
}
|
||||
</script>");
|
||||
}
|
||||
|
||||
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("<div class=\"{0} {1} \">", BootsrapHelper.GetSizeClasses(labelWidth, allSizeSame), customClass);
|
||||
sb.AppendFormat("<label class=\"windowInputLabel\" for=\"{0}\">{1}</label>", controlName, labelMsg);
|
||||
sb.AppendFormat("</div><div class=\"{0} {1}\">", BootsrapHelper.GetSizeClasses(inputWidth, allSizeSame), customClass);
|
||||
}
|
||||
|
||||
private static void AddRenderWithNameCloseingFrame(StringBuilder sb)
|
||||
{
|
||||
sb.Append("</div>");
|
||||
}
|
||||
|
||||
public static MvcHtmlString KretaSelectorForGrid<TModel, TResult>(this HtmlHelper<TModel> html, string htmlFieldName, string name, string value, Expression<Func<TModel, TResult>> expression, List<ExtendedSelectListItem> list, bool hasTooltip = false, string customClickFunctionName = null)
|
||||
{
|
||||
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
|
||||
|
||||
var controlStringBuilder = new StringBuilder();
|
||||
controlStringBuilder.Append($"<div id=\"div{htmlFieldName.Replace(".", "_")}\">");
|
||||
controlStringBuilder.Append("<div class=\"selectorwrapper\">");
|
||||
controlStringBuilder.Append("<ul class=\"bars weeks\">");
|
||||
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) ?
|
||||
$"<li val=\"{item.Value}\" class=\"kretaSelectorButton\" title=\"{tooltip}\">" :
|
||||
$"<li val=\"{item.Value}\" class=\"kretaSelectorButton\">");
|
||||
controlStringBuilder.Append($"<div>{item.Text}</div>");
|
||||
controlStringBuilder.Append("</li>");
|
||||
}
|
||||
|
||||
controlStringBuilder.Append("</ul>");
|
||||
controlStringBuilder.Append("<div class=\"clearfix\"></div>");
|
||||
|
||||
controlStringBuilder.Append("<input ");
|
||||
RouteValueDictionary attributes = Mapper.GetUnobtrusiveValidationAttributes(html, expression, null, metadata);
|
||||
foreach (string key in attributes.Keys)
|
||||
{
|
||||
controlStringBuilder.Append($"{key}='{attributes[key]}' ");
|
||||
}
|
||||
|
||||
controlStringBuilder.AppendFormat(@"type =""hidden"" value="""" name=""{0}"" id=""{0}"" data-rowInputName=""{1}"" />", htmlFieldName, name);
|
||||
controlStringBuilder.Append("</div>");
|
||||
controlStringBuilder.Append("</div>");
|
||||
|
||||
var scriptStringBuilder = new StringBuilder();
|
||||
scriptStringBuilder.Append("<script>");
|
||||
scriptStringBuilder.Append("$(document).ready(function() {");
|
||||
|
||||
scriptStringBuilder.Append($"$('\\#div{htmlFieldName.Replace(".", "_")}').find('.selectorwrapper > ul > li').click(function() {{");
|
||||
|
||||
scriptStringBuilder.Append(@"
|
||||
var elem = $(this);
|
||||
var ugyanarra = elem.hasClass('activebar');
|
||||
var hidden = elem.closest('.selectorwrapper').find('input[type=""hidden""]');
|
||||
elem.siblings('li').removeClass('activebar');
|
||||
if (ugyanarra)
|
||||
{
|
||||
elem.removeClass('activebar');
|
||||
hidden.val('');
|
||||
hidden.trigger('change');
|
||||
}
|
||||
else {
|
||||
elem.addClass('activebar');
|
||||
hidden.val($(elem).attr('val'));
|
||||
hidden.trigger('change');
|
||||
}
|
||||
");
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(customClickFunctionName))
|
||||
{
|
||||
scriptStringBuilder.Append(customClickFunctionName + "(this);");
|
||||
}
|
||||
|
||||
scriptStringBuilder.Append("});");
|
||||
scriptStringBuilder.Append($"$('\\#div{htmlFieldName.Replace(".", "_")}').find('.selectorwrapper > ul > li[val=\"{value}\"]').click();");
|
||||
|
||||
scriptStringBuilder.Append("});");
|
||||
scriptStringBuilder.Append("</script>");
|
||||
|
||||
var result = new StringBuilder();
|
||||
result.Append(controlStringBuilder);
|
||||
result.Append(scriptStringBuilder);
|
||||
|
||||
return new MvcHtmlString(result.ToString());
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue