kreta/KretaWeb/Helpers/RangeTimePickerExtensions.cs
2024-03-13 00:33:46 +01:00

113 lines
6.5 KiB
C#

using System;
using System.Linq.Expressions;
using System.Text;
using System.Web.Mvc;
using Kreta.Framework;
namespace Kreta.Web.Helpers
{
public static class RangeTimePickerExtensions
{
public static MvcHtmlString KretaRangeTimePickerSideBar<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> fromExpression, Expression<Func<TModel, TValue>> toExpression, string title = "", int interval = 0)
{
var fromFieldName = ExpressionHelper.GetExpressionText(fromExpression);
var fromFieldId = fromFieldName.Replace(".", "_");
var fromMetadata = ModelMetadata.FromLambdaExpression(fromExpression, helper.ViewData);
var fromDisplayName = fromMetadata.DisplayName;
var fromValue = fromMetadata.Model;
var toFieldName = ExpressionHelper.GetExpressionText(toExpression);
var toFieldId = toFieldName.Replace(".", "_");
var toMetadata = ModelMetadata.FromLambdaExpression(toExpression, helper.ViewData);
var toDisplayName = toMetadata.DisplayName;
var toValue = toMetadata.Model;
StringBuilder sb = new StringBuilder();
string fromDate = "<input id='" + fromFieldId + "' name='" + fromFieldName + "' value='" + fromValue + "' />";
string toDate = "<input id='" + toFieldId + "' name='" + toFieldName + "' value='" + toValue + "' />";
string scriptTag = @"<script>
$(document).ready(function () {
function start" + fromFieldId + @"Change() {
var startTime = start" + fromFieldId + @".value(), endTime = end" + toFieldId + @".value();
if (startTime) {
startTime = new Date(startTime);
startTime.setDate(startTime.getDate());
end" + toFieldId + @".min(startTime);
} else if (endTime) {
start" + fromFieldId + @".max(new Date(endTime));
} else {
endTime = new Date();
start" + fromFieldId + @".max(endTime);
end" + toFieldId + @".min(endTime);
}
}
function end" + toFieldId + @"Change() {
var endTime = end" + toFieldId + @".value(), startTime = start" + fromFieldId + @".value();
if (endTime) {
endTime = new Date(endTime);
endTime.setDate(endTime.getDate());
start" + fromFieldId + @".max(endTime);
} else if (startTime) {
end" + toFieldId + @".min(new Date(startTime));
} else {
endTime = new Date();
start" + fromFieldId + @".max(endTime);
end" + toFieldId + @".min(endTime);
}
}
var start" + fromFieldId + @" = $('#" + fromFieldId + @"').kendoTimePicker({
change: start" + fromFieldId + @"Change,
parseFormats: [""HH:mm""]," + @"
" + ((interval > 0) ? "interval: " + interval : "") + @"
}).data('kendoTimePicker');
var end" + toFieldId + @" = $('#" + toFieldId + @"').kendoTimePicker({
change: end" + toFieldId + @"Change,
parseFormats: [""HH:mm""]," + @"
" + ((interval > 0) ? "interval: " + interval : "") + @"
}).data('kendoTimePicker');
start" + fromFieldId + @".max(end" + toFieldId + @".value());
end" + toFieldId + @".min(start" + fromFieldId + @".value());
$('#" + fromFieldId + @"').parent().parent().after('" + string.Format("<span class=\"searchPanelLabel\">{0}</span>", StringResourcesUtil.GetString(3080)) + @"');
$('#" + toFieldId + @"').parent().parent().after('" + string.Format("<span class=\"searchPanelLabel\">{0}</span>", StringResourcesUtil.GetString(3081)) + @"');
});
</script>";
string displayName = "";
if (!string.IsNullOrWhiteSpace(title))
{ displayName = title; }
else
{
if (!string.IsNullOrWhiteSpace(fromDisplayName))
{ displayName = fromDisplayName; }
else
{
if (!string.IsNullOrWhiteSpace(toDisplayName))
{ displayName = toDisplayName; }
}
}
sb.Append("<div class=\"searchPanelRow\">");
sb.Append("<div class=\"searchPanelRowTitle\">");
sb.Append("<label class=\"searchPanelLabel\" for=\"").Append("aaa").Append("\">").Append(displayName).Append("</label>");
sb.Append("</div>");
sb.Append("<div class=\"searchPanelRowValue\">");
sb.Append(fromDate).Append("<br />").Append(toDate).Append(scriptTag);
sb.Append("</div>");
sb.Append("</div>");
sb.Append("<script>");
sb.Append($"KretaDateTimeHelper.SetMaskedTimepickerById(\"{fromFieldId}\");").Append($"KretaDateTimeHelper.SetMaskedTimepickerById(\"{toFieldId}\");");
sb.Append("</script>");
return new MvcHtmlString(sb.ToString());
}
}
}