113 lines
6.5 KiB
C#
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());
|
|
}
|
|
}
|
|
}
|