Browse Source

refactored

pull/15806/head
Ebicoglu 4 years ago
parent
commit
22668a2a54
  1. 36
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs
  2. 7
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelper.cs
  3. 8
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerDrops.cs
  4. 12
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerOpens.cs
  5. 23
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs
  6. 8
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerWeekNumbers.cs
  7. 5
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDateRangePickerTagHelper.cs
  8. 45
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDateRangePickerTagHelperService.cs
  9. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/DatePickerOptionsAttribute.cs
  10. 5
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/DateRangePickerAttribute.cs
  11. 117
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/IAbpDatePickerOptions.cs
  12. 226
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js

36
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs

@ -179,34 +179,37 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm
return abpDateInputTagHelper; return abpDateInputTagHelper;
} }
private AbpTagHelper GetAbpDateRangeInputTagHelper(TagHelperContext context, TagHelperOutput output, private AbpTagHelper GetAbpDateRangeInputTagHelper(TagHelperContext context, TagHelperOutput output, ModelExpression model)
ModelExpression model)
{ {
var modelAttribute = model.ModelExplorer.GetAttribute<DateRangePickerAttribute>(); var modelAttribute = model.ModelExplorer.GetAttribute<DateRangePickerAttribute>();
var pickerId = modelAttribute.PickerId; var pickerId = modelAttribute.PickerId;
var otherModel = TagHelper.Model.ModelExplorer.Properties.SingleOrDefault(x =>
x != model.ModelExplorer && x.GetAttribute<DateRangePickerAttribute>()?.PickerId == pickerId);
var otherModelAttribute = otherModel?.GetAttribute<DateRangePickerAttribute>();
var abpDateRangeInputTagHelper = _serviceProvider.GetRequiredService<AbpDateRangePickerTagHelper>(); var abpDateRangeInputTagHelper = _serviceProvider.GetRequiredService<AbpDateRangePickerTagHelper>();
abpDateRangeInputTagHelper.PickerId = pickerId; abpDateRangeInputTagHelper.PickerId = pickerId;
abpDateRangeInputTagHelper.ViewContext = TagHelper.ViewContext; abpDateRangeInputTagHelper.ViewContext = TagHelper.ViewContext;
if (modelAttribute.IsStart) if (modelAttribute.IsStart)
{ {
abpDateRangeInputTagHelper.AspForStart = model; abpDateRangeInputTagHelper.AspForStart = model;
}
if (otherModelAttribute?.IsStart == false) var otherModelExists = TryToGetOtherDateModel(model, pickerId, out var otherModel);
{ if (otherModelExists && otherModel.GetAttribute<DateRangePickerAttribute>().IsEnd)
abpDateRangeInputTagHelper.AspForEnd = ModelExplorerToModelExpressionConverter(otherModel); {
abpDateRangeInputTagHelper.AspForEnd = ModelExplorerToModelExpressionConverter(otherModel);
}
} }
return abpDateRangeInputTagHelper; return abpDateRangeInputTagHelper;
} }
private bool TryToGetOtherDateModel(ModelExpression model, string pickerId, out ModelExplorer otherModel)
{
otherModel = TagHelper.Model.ModelExplorer.Properties.SingleOrDefault(x => x != model.ModelExplorer && x.GetAttribute<DateRangePickerAttribute>()?.PickerId == pickerId);
return otherModel != null;
}
private bool IsDateRangeGroup(ModelExplorer modelModelExplorer) private static bool IsDateRangeGroup(ModelExplorer modelModelExplorer)
{ {
return modelModelExplorer.GetAttribute<DateRangePickerAttribute>() != null; return modelModelExplorer.GetAttribute<DateRangePickerAttribute>() != null;
} }
@ -353,18 +356,23 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm
{ {
return IsEnum(model.ModelExplorer) || AreSelectItemsProvided(model.ModelExplorer); return IsEnum(model.ModelExplorer) || AreSelectItemsProvided(model.ModelExplorer);
} }
protected virtual bool IsDateGroup(TagHelperContext context, ModelExpression model) protected virtual bool IsDateGroup(TagHelperContext context, ModelExpression model)
{ {
if(model.ModelExplorer.GetAttribute<DatePickerAttribute>() != null || model.ModelExplorer.GetAttribute<DateRangePickerAttribute>() != null) if (model.ModelExplorer.GetAttribute<DatePickerAttribute>() != null ||
model.ModelExplorer.GetAttribute<DateRangePickerAttribute>() != null)
{ {
return true; return true;
} }
if(model.Metadata.ModelType == typeof(DateTime) || model.Metadata.ModelType == typeof(DateTime?) || model.Metadata.ModelType == typeof(DateTimeOffset) || model.Metadata.ModelType == typeof(DateTimeOffset?)) if (model.Metadata.ModelType == typeof(DateTime) ||
model.Metadata.ModelType == typeof(DateTime?) ||
model.Metadata.ModelType == typeof(DateTimeOffset) ||
model.Metadata.ModelType == typeof(DateTimeOffset?))
{ {
return true; return true;
} }
return false; return false;
} }

7
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelper.cs

@ -9,7 +9,8 @@ public abstract class
where TTagHelper : AbpDatePickerBaseTagHelper<TTagHelper> where TTagHelper : AbpDatePickerBaseTagHelper<TTagHelper>
{ {
private IAbpDatePickerOptions _abpDatePickerOptionsImplementation; private readonly IAbpDatePickerOptions _abpDatePickerOptionsImplementation;
public string Label { get; set; } public string Label { get; set; }
public string LabelTooltip { get; set; } public string LabelTooltip { get; set; }
@ -42,15 +43,11 @@ public abstract class
public bool SuppressLabel { get; set; } public bool SuppressLabel { get; set; }
protected AbpDatePickerBaseTagHelper(AbpDatePickerBaseTagHelperService<TTagHelper> service) : base(service) protected AbpDatePickerBaseTagHelper(AbpDatePickerBaseTagHelperService<TTagHelper> service) : base(service)
{ {
_abpDatePickerOptionsImplementation = new AbpDatePickerOptions(); _abpDatePickerOptionsImplementation = new AbpDatePickerOptions();
} }
public string PickerId { public string PickerId {
get => _abpDatePickerOptionsImplementation.PickerId; get => _abpDatePickerOptionsImplementation.PickerId;
set => _abpDatePickerOptionsImplementation.PickerId = value; set => _abpDatePickerOptionsImplementation.PickerId = value;

8
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerDrops.cs

@ -1,8 +1,8 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker;
public enum AbpDatePickerDrops public enum AbpDatePickerDrops : byte
{ {
Down, Down = 1,
Up, Up = 2,
Auto Auto = 3
} }

12
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerOpens.cs

@ -1,8 +1,10 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker; using System;
public enum AbpDatePickerOpens namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker;
public enum AbpDatePickerOpens : byte
{ {
Left, Left = 1,
Right, Right = 2,
Center Center = 3,
} }

23
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs

@ -16,14 +16,14 @@ public class AbpDatePickerTagHelperService : AbpDatePickerBaseTagHelperService<A
{ {
public AbpDatePickerTagHelperService(IJsonSerializer jsonSerializer, IHtmlGenerator generator, HtmlEncoder encoder, IServiceProvider serviceProvider, IStringLocalizer<AbpUiResource> l, IAbpTagHelperLocalizer tagHelperLocalizer) : base(jsonSerializer, generator, encoder, serviceProvider, l, tagHelperLocalizer) public AbpDatePickerTagHelperService(IJsonSerializer jsonSerializer, IHtmlGenerator generator, HtmlEncoder encoder, IServiceProvider serviceProvider, IStringLocalizer<AbpUiResource> l, IAbpTagHelperLocalizer tagHelperLocalizer) : base(jsonSerializer, generator, encoder, serviceProvider, l, tagHelperLocalizer)
{ {
} }
protected override TagHelperOutput TagHelperOutput { get; set; } protected override TagHelperOutput TagHelperOutput { get; set; }
[CanBeNull] [CanBeNull]
protected virtual InputTagHelper DateTagHelper { get; set; } protected virtual InputTagHelper DateTagHelper { get; set; }
[CanBeNull] [CanBeNull]
protected virtual TagHelperOutput DateTagHelperOutput { get; set; } protected virtual TagHelperOutput DateTagHelperOutput { get; set; }
protected override string GetPropertyName() protected override string GetPropertyName()
@ -39,12 +39,15 @@ public class AbpDatePickerTagHelperService : AbpDatePickerBaseTagHelperService<A
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
if (TagHelper.AspFor != null)
if(TagHelper.AspFor != null)
{ {
DateTagHelper = new InputTagHelper(Generator) { DateTagHelper = new InputTagHelper(Generator)
InputTypeName = "hidden", ViewContext = TagHelper.ViewContext, For = TagHelper.AspFor, {
InputTypeName = "hidden",
ViewContext = TagHelper.ViewContext,
For = TagHelper.AspFor,
}; };
var attributes = new TagHelperAttributeList { { "data-date", "true" }, { "type", "hidden" } }; var attributes = new TagHelperAttributeList { { "data-date", "true" }, { "type", "hidden" } };
DateTagHelperOutput = await DateTagHelper.ProcessAndGetOutputAsync(attributes, context, "input"); DateTagHelperOutput = await DateTagHelper.ProcessAndGetOutputAsync(attributes, context, "input");
} }
@ -60,7 +63,9 @@ public class AbpDatePickerTagHelperService : AbpDatePickerBaseTagHelperService<A
protected override void AddBaseTagAttributes(TagHelperAttributeList attributes) protected override void AddBaseTagAttributes(TagHelperAttributeList attributes)
{ {
if(TagHelper.AspFor != null && TagHelper.AspFor.Model != null && SupportedInputTypes.TryGetValue(TagHelper.AspFor.Metadata.ModelType, out var convertFunc)) if (TagHelper.AspFor != null &&
TagHelper.AspFor.Model != null &&
SupportedInputTypes.TryGetValue(TagHelper.AspFor.Metadata.ModelType, out var convertFunc))
{ {
attributes.Add("data-date", convertFunc(TagHelper.AspFor.Model)); attributes.Add("data-date", convertFunc(TagHelper.AspFor.Model));
} }

8
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerWeekNumbers.cs

@ -1,8 +1,8 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker;
public enum AbpDatePickerWeekNumbers public enum AbpDatePickerWeekNumbers : byte
{ {
None, None = 0,
Normal, Normal = 1,
Iso Iso = 2
} }

5
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDateRangePickerTagHelper.cs

@ -7,15 +7,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker;
[HtmlTargetElement("abp-date-range-picker", TagStructure = TagStructure.NormalOrSelfClosing)] [HtmlTargetElement("abp-date-range-picker", TagStructure = TagStructure.NormalOrSelfClosing)]
public class AbpDateRangePickerTagHelper : AbpDatePickerBaseTagHelper<AbpDateRangePickerTagHelper> public class AbpDateRangePickerTagHelper : AbpDatePickerBaseTagHelper<AbpDateRangePickerTagHelper>
{ {
// Start date
[CanBeNull] [CanBeNull]
public ModelExpression AspForStart { get; set; } public ModelExpression AspForStart { get; set; }
// End date
[CanBeNull] [CanBeNull]
public ModelExpression AspForEnd { get; set; } public ModelExpression AspForEnd { get; set; }
public AbpDateRangePickerTagHelper(AbpDateRangePickerTagHelperService tagHelperService) : base(tagHelperService) public AbpDateRangePickerTagHelper(AbpDateRangePickerTagHelperService tagHelperService) :
base(tagHelperService)
{ {
} }
} }

45
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDateRangePickerTagHelperService.cs

@ -17,7 +17,8 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ
{ {
public AbpDateRangePickerTagHelperService(IJsonSerializer jsonSerializer, IHtmlGenerator generator, public AbpDateRangePickerTagHelperService(IJsonSerializer jsonSerializer, IHtmlGenerator generator,
HtmlEncoder encoder, IServiceProvider serviceProvider, IStringLocalizer<AbpUiResource> l, HtmlEncoder encoder, IServiceProvider serviceProvider, IStringLocalizer<AbpUiResource> l,
IAbpTagHelperLocalizer tagHelperLocalizer) : base(jsonSerializer, generator, encoder, serviceProvider, l, IAbpTagHelperLocalizer tagHelperLocalizer) :
base(jsonSerializer, generator, encoder, serviceProvider, l,
tagHelperLocalizer) tagHelperLocalizer)
{ {
} }
@ -26,36 +27,36 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ
protected override T GetAttributeAndModelExpression<T>(out ModelExpression modelExpression) protected override T GetAttributeAndModelExpression<T>(out ModelExpression modelExpression)
{ {
modelExpression = modelExpression = new[] { TagHelper.AspForStart, TagHelper.AspForEnd }.FirstOrDefault(x => x?.ModelExplorer?.GetAttribute<T>() != null);
new[] { TagHelper.AspForStart, TagHelper.AspForEnd }.FirstOrDefault(x =>
x?.ModelExplorer?.GetAttribute<T>() != null);
return modelExpression?.ModelExplorer.GetAttribute<T>(); return modelExpression?.ModelExplorer.GetAttribute<T>();
} }
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
if (TagHelper.AspForStart != null) if (TagHelper.AspForStart != null)
{ {
var startDateAttributes = var startDateAttributes = new TagHelperAttributeList { { "data-start-date", "true" }, { "type", "hidden" } };
new TagHelperAttributeList { { "data-start-date", "true" }, { "type", "hidden" } }; StartDateTagHelper = new InputTagHelper(Generator)
StartDateTagHelper = new InputTagHelper(Generator) { {
ViewContext = TagHelper.ViewContext, For = TagHelper.AspForStart, InputTypeName = "hidden" ViewContext = TagHelper.ViewContext,
For = TagHelper.AspForStart,
InputTypeName = "hidden"
}; };
StartDateTagHelperOutput = StartDateTagHelperOutput = await StartDateTagHelper.ProcessAndGetOutputAsync(startDateAttributes, context, "input");
await StartDateTagHelper.ProcessAndGetOutputAsync(startDateAttributes, context, "input");
} }
if (TagHelper.AspForEnd != null) if (TagHelper.AspForEnd != null)
{ {
var endDateAttributes = new TagHelperAttributeList { { "data-end-date", "true" }, { "type", "hidden" } }; var endDateAttributes = new TagHelperAttributeList { { "data-end-date", "true" }, { "type", "hidden" } };
EndDateTagHelper = new InputTagHelper(Generator) { EndDateTagHelper = new InputTagHelper(Generator)
ViewContext = TagHelper.ViewContext, For = TagHelper.AspForEnd,InputTypeName = "hidden" {
ViewContext = TagHelper.ViewContext,
For = TagHelper.AspForEnd,
InputTypeName = "hidden"
}; };
EndDateTagHelperOutput = EndDateTagHelperOutput = await EndDateTagHelper.ProcessAndGetOutputAsync(endDateAttributes, context, "input");
await EndDateTagHelper.ProcessAndGetOutputAsync(endDateAttributes, context, "input");
} }
await base.ProcessAsync(context, output); await base.ProcessAsync(context, output);
@ -63,16 +64,16 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ
protected override TagHelperOutput TagHelperOutput { get; set; } protected override TagHelperOutput TagHelperOutput { get; set; }
[CanBeNull] [CanBeNull]
protected virtual InputTagHelper StartDateTagHelper { get; set; } protected virtual InputTagHelper StartDateTagHelper { get; set; }
[CanBeNull] [CanBeNull]
protected virtual TagHelperOutput StartDateTagHelperOutput { get; set; } protected virtual TagHelperOutput StartDateTagHelperOutput { get; set; }
[CanBeNull] [CanBeNull]
protected virtual InputTagHelper EndDateTagHelper { get; set; } protected virtual InputTagHelper EndDateTagHelper { get; set; }
[CanBeNull] [CanBeNull]
protected virtual TagHelperOutput EndDateTagHelperOutput { get; set; } protected virtual TagHelperOutput EndDateTagHelperOutput { get; set; }
protected override string GetPropertyName() protected override string GetPropertyName()
@ -87,13 +88,15 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ
protected override void AddBaseTagAttributes(TagHelperAttributeList attributes) protected override void AddBaseTagAttributes(TagHelperAttributeList attributes)
{ {
if (TagHelper.AspForStart != null && TagHelper.AspForStart.Model != null && if (TagHelper.AspForStart != null &&
TagHelper.AspForStart.Model != null &&
SupportedInputTypes.TryGetValue(TagHelper.AspForStart.Metadata.ModelType, out var convertFuncStart)) SupportedInputTypes.TryGetValue(TagHelper.AspForStart.Metadata.ModelType, out var convertFuncStart))
{ {
attributes.Add("data-start-date", convertFuncStart(TagHelper.AspForStart.Model)); attributes.Add("data-start-date", convertFuncStart(TagHelper.AspForStart.Model));
} }
if (TagHelper.AspForEnd != null && TagHelper.AspForEnd.Model != null && if (TagHelper.AspForEnd != null &&
TagHelper.AspForEnd.Model != null &&
SupportedInputTypes.TryGetValue(TagHelper.AspForEnd.Metadata.ModelType, out var convertFuncEnd)) SupportedInputTypes.TryGetValue(TagHelper.AspForEnd.Metadata.ModelType, out var convertFuncEnd))
{ {
attributes.Add("data-end-date", convertFuncEnd(TagHelper.AspForEnd.Model)); attributes.Add("data-end-date", convertFuncEnd(TagHelper.AspForEnd.Model));

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/DatePickerOptionsAttribute.cs

@ -6,7 +6,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker;
[AttributeUsage(AttributeTargets.Property)] [AttributeUsage(AttributeTargets.Property)]
public class DatePickerOptionsAttribute : Attribute, IAbpDatePickerOptions public class DatePickerOptionsAttribute : Attribute, IAbpDatePickerOptions
{ {
private IAbpDatePickerOptions _abpDatePickerOptionsImplementation; private readonly IAbpDatePickerOptions _abpDatePickerOptionsImplementation;
public DatePickerOptionsAttribute() public DatePickerOptionsAttribute()
{ {

5
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/DateRangePickerAttribute.cs

@ -6,8 +6,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker;
public class DateRangePickerAttribute : Attribute public class DateRangePickerAttribute : Attribute
{ {
public string PickerId { get; set; } public string PickerId { get; set; }
public bool IsStart { get; set; } public bool IsStart { get; set; }
public bool IsEnd => !IsStart;
public DateRangePickerAttribute(string pickerId, bool isStart = false) public DateRangePickerAttribute(string pickerId, bool isStart = false)
{ {
PickerId = pickerId; PickerId = pickerId;

117
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/IAbpDatePickerOptions.cs

@ -7,94 +7,143 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker;
public interface IAbpDatePickerOptions public interface IAbpDatePickerOptions
{ {
public string PickerId { get; set; } public string PickerId { get; set; }
// Min and Max date
/// <summary>
/// Min date allowed
/// </summary>
DateTime? MinDate { get; set; } DateTime? MinDate { get; set; }
/// <summary>
/// Max date allowed
/// </summary>
DateTime? MaxDate { get; set; } DateTime? MaxDate { get; set; }
// Max span between start and end date /// <summary>
object? MaxSpan { get; set; } /// Max span between start and end date
/// </summary>
object MaxSpan { get; set; }
// Show dropdowns /// <summary>
/// Show dropdowns
/// </summary>
bool? ShowDropdowns { get; set; } bool? ShowDropdowns { get; set; }
// Min and Max year /// <summary>
/// Min year allowed
/// </summary>
int? MinYear { get; set; } int? MinYear { get; set; }
/// <summary>
/// Max year allowed
/// </summary>
int? MaxYear { get; set; } int? MaxYear { get; set; }
// Show week numbers /// <summary>
/// Show week numbers
/// </summary>
AbpDatePickerWeekNumbers WeekNumbers { get; set; } AbpDatePickerWeekNumbers WeekNumbers { get; set; }
// Time picker /// <summary>
/// Allows users to pick a time
/// </summary>
bool? TimePicker { get; set; } bool? TimePicker { get; set; }
// Time picker increment /// <summary>
/// The time interval allowed
/// </summary>
int? TimePickerIncrement { get; set; } int? TimePickerIncrement { get; set; }
// Time picker 24 hour /// <summary>
/// Sets the time picker hour format as 12 or 24.
/// </summary>
bool? TimePicker24Hour { get; set; } bool? TimePicker24Hour { get; set; }
// Time picker seconds /// <summary>
/// Allows seconds selection
/// </summary>
bool? TimePickerSeconds { get; set; } bool? TimePickerSeconds { get; set; }
// Ranges object /// <summary>
/// Predefined date range list
/// </summary>
List<AbpDatePickerRange> Ranges { get; set; } List<AbpDatePickerRange> Ranges { get; set; }
// Show custom range label /// <summary>
/// Show custom range label
/// </summary>
bool? ShowCustomRangeLabel { get; set; } bool? ShowCustomRangeLabel { get; set; }
// Always show calendar /// <summary>
/// Always show calendars
/// </summary>
bool? AlwaysShowCalendars { get; set; } bool? AlwaysShowCalendars { get; set; }
// Opens date picker on left or right or center of the input /// <summary>
/// The horizontal location of the datepicker
/// </summary>
AbpDatePickerOpens Opens { get; set; } AbpDatePickerOpens Opens { get; set; }
// Drops down or up or auto /// <summary>
/// The vertical location of the datepicker
/// </summary>
AbpDatePickerDrops Drops { get; set; } AbpDatePickerDrops Drops { get; set; }
// Button classes /// <summary>
[CanBeNull] /// Button CSS classes
/// </summary>
[CanBeNull]
string ButtonClasses { get; set; } string ButtonClasses { get; set; }
// Apply class to all buttons /// <summary>
[CanBeNull] /// Apply class to all buttons
/// </summary>
[CanBeNull]
string ApplyButtonClasses { get; set; } string ApplyButtonClasses { get; set; }
// Cancel class to all buttons /// <summary>
[CanBeNull] /// Cancel CSS classes to all buttons
/// </summary>
[CanBeNull]
string CancelButtonClasses { get; set; } string CancelButtonClasses { get; set; }
// Locale /// <summary>
[CanBeNull] /// Sets a custom locale
/// </summary>
[CanBeNull]
object Locale { get; set; } object Locale { get; set; }
// Auto apply /// <summary>
/// Applies the value when it a date is selected
/// </summary>
bool? AutoApply { get; set; } bool? AutoApply { get; set; }
// Linked calendars /// <summary>
/// When enabled, the two calendars displayed will always be for two sequential months (i.e. January and February), and both will be advanced when clicking the left or right arrows above the calendars. When disabled, the two calendars can be individually advanced and display any month/year.
/// </summary>
bool? LinkedCalendars { get; set; } bool? LinkedCalendars { get; set; }
// Auto update input /// <summary>
/// Updates the input automatically
/// </summary>
bool? AutoUpdateInput { get; set; } bool? AutoUpdateInput { get; set; }
// Parent element // Parent element
[CanBeNull] [CanBeNull]
string ParentEl { get; set; } string ParentEl { get; set; }
[CanBeNull] [CanBeNull]
string DateFormat { get; set; } string DateFormat { get; set; }
bool OpenButton { get; set; } bool OpenButton { get; set; }
bool ClearButton { get; set; } bool ClearButton { get; set; }
bool SingleOpenAndClearButton { get; set; } bool SingleOpenAndClearButton { get; set; }
bool? IsUtc { get; set; } bool? IsUtc { get; set; }
bool? IsIso { get; set; } bool? IsIso { get; set; }
[CanBeNull] [CanBeNull]
object Options { get; set; } object Options { get; set; }
} }

226
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js

@ -187,7 +187,7 @@
}); });
}); });
} }
abp.libs.bootstrapDateRangePicker = { abp.libs.bootstrapDateRangePicker = {
packageName: "bootstrap-daterangepicker", packageName: "bootstrap-daterangepicker",
@ -207,6 +207,7 @@
if (options.label) { if (options.label) {
label.text(options.label) label.text(options.label)
} }
$container.append(label) $container.append(label)
var $datePicker = options.singleDatePicker ? $('<abp-date-picker></abp-date-picker>') : $('<abp-date-range-picker></abp-date-range-picker>'); var $datePicker = options.singleDatePicker ? $('<abp-date-picker></abp-date-picker>') : $('<abp-date-range-picker></abp-date-range-picker>');
$container.append($datePicker) $container.append($datePicker)
@ -292,19 +293,20 @@
return $container; return $container;
} }
}; };
abp.dom.initializers.initializeDateRangePickers = function ($rootElement) { abp.dom.initializers.initializeDateRangePickers = function ($rootElement) {
$rootElement $rootElement
.findWithSelf('abp-date-picker,abp-date-range-picker') .findWithSelf('abp-date-picker,abp-date-range-picker')
.each(function () { .each(function () {
var $this = $(this); var $this = $(this);
var $input = $(this).find('.input-group input[type="text"]') var $input = $this.find('.input-group input[type="text"]')
if($input.data('daterangepicker')) { if ($input.data('daterangepicker')) {
return; return;
} }
var $openButton = $(this).find('button[data-type="open"]')
var $clearButton = $(this).find('button[data-type="clear"]') var $openButton = $this.find('button[data-type="open"]')
var $clearButton = $this.find('button[data-type="clear"]')
var singleDatePicker = $this.is('abp-date-picker') var singleDatePicker = $this.is('abp-date-picker')
var options = {}; var options = {};
options.singleDatePicker = singleDatePicker; options.singleDatePicker = singleDatePicker;
@ -321,29 +323,27 @@
maxYear: parseInt(moment().add(100, 'year').locale('en').format('YYYY')), maxYear: parseInt(moment().add(100, 'year').locale('en').format('YYYY')),
locale: { locale: {
direction: abp.localization.currentCulture.isRightToLeft ? 'rtl' : 'ltr', direction: abp.localization.currentCulture.isRightToLeft ? 'rtl' : 'ltr',
todayLabel: abp.localization.localize('Today', 'AbpUi'), todayLabel: abp.localization.localize('Today', 'AbpUi'),
clearLabel: abp.localization.localize('Clear', 'AbpUi'), clearLabel: abp.localization.localize('Clear', 'AbpUi'),
applyLabel: abp.localization.localize('Apply', 'AbpUi'), applyLabel: abp.localization.localize('Apply', 'AbpUi'),
}, },
singleOpenAndClearButton: true singleOpenAndClearButton: true
}; };
var locale = defaultOptions.locale; var locale = defaultOptions.locale;
$.extend(options, defaultOptions); $.extend(options, defaultOptions);
$.extend(options, $this.data()); $.extend(options, $this.data());
if(jQuery.isEmptyObject(options.locale)) if (jQuery.isEmptyObject(options.locale)) {
{
options.locale = locale; options.locale = locale;
}else{ } else {
locale = options.locale; locale = options.locale;
} }
$.extend(options, $this.data("options")); $.extend(options, $this.data("options"));
if(jQuery.isEmptyObject(options.locale)) if (jQuery.isEmptyObject(options.locale)) {
{
options.locale = locale; options.locale = locale;
} }
if(options.timePicker && options.timePicker24Hour === undefined){ if (options.timePicker && options.timePicker24Hour === undefined) {
options.timePicker24Hour = moment.localeData().longDateFormat('LT').indexOf('A') < 1; options.timePicker24Hour = moment.localeData().longDateFormat('LT').indexOf('A') < 1;
} }
@ -356,33 +356,35 @@
var separator = options.separator; var separator = options.separator;
var defaultDateFormat = "YYYY-MM-DD"; var defaultDateFormat = "YYYY-MM-DD";
var singleOpenAndClearButton = options.singleOpenAndClearButton && $clearButton.length > 0 && $openButton.length > 0; var singleOpenAndClearButton = options.singleOpenAndClearButton && $clearButton.length > 0 && $openButton.length > 0;
const replaceButton = function (hasDate) { const replaceButton = function (hasDate) {
var hiddenClass = 'd-none'; var hiddenClass = 'd-none';
if(singleOpenAndClearButton){
if(hasDate){ if (singleOpenAndClearButton) {
if (hasDate) {
$openButton.addClass(hiddenClass); $openButton.addClass(hiddenClass);
$clearButton.removeClass(hiddenClass); $clearButton.removeClass(hiddenClass);
$clearButton.insertAfter($openButton); $clearButton.insertAfter($openButton);
}else { } else {
$openButton.removeClass(hiddenClass); $openButton.removeClass(hiddenClass);
$clearButton.addClass(hiddenClass); $clearButton.addClass(hiddenClass);
$openButton.insertAfter($clearButton); $openButton.insertAfter($clearButton);
} }
} }
} }
const getMoment = function (date) { const getMoment = function (date) {
if(!date){ if (!date) {
return isUtc ? moment.utc() : moment(); return isUtc ? moment.utc() : moment();
} }
if(isUtc) {
return moment.utc(date,dateFormat); if (isUtc) {
}else { return moment.utc(date, dateFormat);
return moment(date,dateFormat); } else {
return moment(date, dateFormat);
} }
} }
if (dateFormat) { if (dateFormat) {
options.locale = options.locale || {}; options.locale = options.locale || {};
options.locale.format = dateFormat; options.locale.format = dateFormat;
@ -394,25 +396,25 @@
} }
var startDate = options.startDate ? moment(options.startDate) : null; var startDate = options.startDate ? moment(options.startDate) : null;
if(singleDatePicker && !startDate){ if (singleDatePicker && !startDate) {
startDate = options.date ? moment(options.date) : null; startDate = options.date ? moment(options.date) : null;
} }
var endDate = options.endDate ? moment(options.endDate) : null; var endDate = options.endDate ? moment(options.endDate) : null;
if (startDate) { if (startDate) {
options.startDate = startDate; options.startDate = startDate;
} }
if (endDate) { if (endDate) {
options.endDate = endDate; options.endDate = endDate;
} }
if(options.ranges){ if (options.ranges) {
$.each(options.ranges, function (key, value) { $.each(options.ranges, function (key, value) {
let start = value[0]; let start = value[0];
let end; let end;
if(value.length > 1){ if (value.length > 1) {
end = value[1]; end = value[1];
}else{ } else {
end = value[0]; end = value[0];
} }
options.ranges[key] = [getMoment(start), getMoment(end)]; options.ranges[key] = [getMoment(start), getMoment(end)];
@ -421,11 +423,11 @@
var $todayBtn = $('<button type="button" class="btn btn-sm btn-default today-btn" data-action="today">' + options.locale.todayLabel + '</button>'); var $todayBtn = $('<button type="button" class="btn btn-sm btn-default today-btn" data-action="today">' + options.locale.todayLabel + '</button>');
var $clearBtn = $('<button type="button" class="btn btn-sm btn-default clear-btn" data-action="clear">' + options.locale.clearLabel + '</button>'); var $clearBtn = $('<button type="button" class="btn btn-sm btn-default clear-btn" data-action="clear">' + options.locale.clearLabel + '</button>');
var extraButtons = []; var extraButtons = [];
if (options.showTodayButton) { if (options.showTodayButton) {
extraButtons.push($todayBtn); extraButtons.push($todayBtn);
$todayBtn.on('click', function () { $todayBtn.on('click', function () {
var today = getMoment(); var today = getMoment();
$input.data('daterangepicker').setStartDate(today); $input.data('daterangepicker').setStartDate(today);
@ -433,43 +435,44 @@
$input.data('daterangepicker').updateView(); $input.data('daterangepicker').updateView();
}); });
} }
if (options.showClearButton) { if (options.showClearButton) {
extraButtons.push($clearBtn); extraButtons.push($clearBtn);
$clearBtn.on('click', function () { $clearBtn.on('click', function () {
$input.val('').trigger('change'); $input.val('').trigger('change');
$dateRangePicker.hide(); $dateRangePicker.hide();
}); });
} }
if (typeof options.template !== 'string' && !(options.template instanceof $)) if (typeof options.template !== 'string' && !(options.template instanceof $))
options.template = options.template =
'<div class="daterangepicker">' + '<div class="daterangepicker">' +
'<div class="ranges"></div>' + '<div class="ranges"></div>' +
'<div class="drp-calendar left">' + '<div class="drp-calendar left">' +
'<div class="calendar-table"></div>' + '<div class="calendar-table"></div>' +
'<div class="calendar-time"></div>' + '<div class="calendar-time"></div>' +
'</div>' + '</div>' +
'<div class="drp-calendar right">' + '<div class="drp-calendar right">' +
'<div class="calendar-table"></div>' + '<div class="calendar-table"></div>' +
'<div class="calendar-time"></div>' + '<div class="calendar-time"></div>' +
'</div>' + '</div>' +
'<div class="drp-buttons">' + '<div class="drp-buttons">' +
'<button class="applyBtn" disabled="disabled" type="button"></button> ' + '<button class="applyBtn" disabled="disabled" type="button"></button> ' +
'</div>' + '</div>' +
'</div>'; '</div>';
$input.daterangepicker(options); $input.daterangepicker(options);
var $dateRangePicker = $input.data('daterangepicker'); var $dateRangePicker = $input.data('daterangepicker');
if($dateRangePicker.container.find('.drp-buttons').css('display') !== 'none'){ if ($dateRangePicker.container.find('.drp-buttons').css('display') !== 'none') {
$.each(extraButtons, function (index, value) { $.each(extraButtons, function (index, value) {
$dateRangePicker.container.find('.drp-buttons').prepend(value); $dateRangePicker.container.find('.drp-buttons').prepend(value);
}); });
} }
else{ else {
var $div = $('<div class="drp-buttons extra-buttons"></div>'); var $div = $('<div class="drp-buttons extra-buttons"></div>');
$div.css('display', 'block'); $div.css('display', 'block');
$.each(extraButtons, function (index, value) { $.each(extraButtons, function (index, value) {
@ -477,14 +480,11 @@
}); });
$div.insertAfter($dateRangePicker.container.find('.drp-buttons')); $div.insertAfter($dateRangePicker.container.find('.drp-buttons'));
} }
$dateRangePicker.outsideClick = function (e) {
$dateRangePicker.outsideClick = function(e) {
var target = $(e.target); var target = $(e.target);
// if the page is clicked anywhere except within the daterangerpicker/button // if the page is clicked anywhere except within the daterangerpicker/button itself then call this.hide()
// itself then call this.hide()
if ( if (
// ie modal dialog fix // ie modal dialog fix
e.type == "focusin" || e.type == "focusin" ||
@ -492,24 +492,27 @@
target.closest(this.container).length || target.closest(this.container).length ||
target.closest('.calendar-table').length || target.closest('.calendar-table').length ||
target.closest($openButton).length target.closest($openButton).length
) return; ) {
return;
}
this.hide(); this.hide();
this.element.trigger('outsideClick.daterangepicker', this); this.element.trigger('outsideClick.daterangepicker', this);
}; };
$openButton.on('click', function () { $openButton.on('click', function () {
$dateRangePicker.toggle(); $dateRangePicker.toggle();
}); });
const extendDateFormat = function (format) { const extendDateFormat = function (format) {
if(timePicker){ if (timePicker) {
if(timePicker24Hour){ if (timePicker24Hour) {
if(timePickerSeconds){ if (timePickerSeconds) {
format += " HH:mm:ss"; format += " HH:mm:ss";
}else{ } else {
format += " HH:mm"; format += " HH:mm";
} }
}else { } else {
if (timePickerSeconds) { if (timePickerSeconds) {
format += ' ' + " hh:mm:ss A" format += ' ' + " hh:mm:ss A"
} else { } else {
@ -517,33 +520,34 @@
} }
} }
} }
return format; return format;
} }
defaultDateFormat = extendDateFormat(defaultDateFormat); defaultDateFormat = extendDateFormat(defaultDateFormat);
if(!dateFormat) { if (!dateFormat) {
dateFormat = extendDateFormat(moment.localeData().longDateFormat('L')) dateFormat = extendDateFormat(moment.localeData().longDateFormat('L'))
} }
if(!separator) { if (!separator) {
separator = $dateRangePicker.locale.separator; separator = $dateRangePicker.locale.separator;
} }
if(singleDatePicker){ if (singleDatePicker) {
if(startDate){ if (startDate) {
$input.val(startDate.format(dateFormat)); $input.val(startDate.format(dateFormat));
} }
}else{ } else {
if(startDate && endDate){ if (startDate && endDate) {
$input.val(startDate.format(dateFormat) + separator + endDate.format(dateFormat)); $input.val(startDate.format(dateFormat) + separator + endDate.format(dateFormat));
} }
} }
$input.on('apply.daterangepicker', function (ev, picker) { $input.on('apply.daterangepicker', function (ev, picker) {
if(singleDatePicker){ if (singleDatePicker) {
$(this).val(picker.startDate.format(dateFormat)); $(this).val(picker.startDate.format(dateFormat));
}else{ } else {
$(this).val(picker.startDate.format(dateFormat) + separator + picker.endDate.format(dateFormat)); $(this).val(picker.startDate.format(dateFormat) + separator + picker.endDate.format(dateFormat));
} }
@ -554,6 +558,7 @@
$(this).val(''); $(this).val('');
$(this).trigger('change'); $(this).trigger('change');
}); });
$input.on('show.daterangepicker', function (ev, picker) { $input.on('show.daterangepicker', function (ev, picker) {
var momentStartDate = getMoment(startDate); var momentStartDate = getMoment(startDate);
var momentEndDate = getMoment(endDate); var momentEndDate = getMoment(endDate);
@ -564,7 +569,6 @@
picker.setEndDate(momentEndDate); picker.setEndDate(momentEndDate);
} }
}); });
$clearButton.on('click', function () { $clearButton.on('click', function () {
$input.val(''); $input.val('');
@ -572,9 +576,9 @@
}); });
$input.on('change', function () { $input.on('change', function () {
if($(this).val() !== ''){ if ($(this).val() !== '') {
replaceButton(true); replaceButton(true);
}else{ } else {
replaceButton(false); replaceButton(false);
} }
var dates = $(this).val().split(separator); var dates = $(this).val().split(separator);
@ -582,91 +586,97 @@
startDate = getMoment(dates[0]); startDate = getMoment(dates[0]);
if (!startDate.isValid()) { if (!startDate.isValid()) {
startDate = null; startDate = null;
}else{ } else {
startDate = formatDate(startDate); startDate = formatDate(startDate);
} }
endDate = getMoment(dates[1]); endDate = getMoment(dates[1]);
if (!endDate.isValid()) { if (!endDate.isValid()) {
endDate = null; endDate = null;
}else{ } else {
endDate = formatDate(endDate); endDate = formatDate(endDate);
} }
} else { } else {
if(dates[0]){ if (dates[0]) {
startDate = getMoment(dates[0]); startDate = getMoment(dates[0]);
if (!startDate.isValid()) { if (!startDate.isValid()) {
startDate = null; startDate = null;
}else{ } else {
startDate = formatDate(startDate); startDate = formatDate(startDate);
} }
} }
else{ else {
startDate = null; startDate = null;
} }
endDate = null; endDate = null;
} }
if(!startDate){
if (!startDate) {
replaceButton(false); replaceButton(false);
$(this).val(''); $(this).val('');
$dateRangePicker.setStartDate(getMoment()); $dateRangePicker.setStartDate(getMoment());
$dateRangePicker.setEndDate(getMoment()); $dateRangePicker.setEndDate(getMoment());
} }
if(!singleDatePicker){ if (!singleDatePicker) {
var input1 = $this.find("input[data-start-date]") var input1 = $this.find("input[data-start-date]")
input1.val(startDate); input1.val(startDate);
var input2 = $this.find("input[data-end-date]") var input2 = $this.find("input[data-end-date]")
input2.val(endDate); input2.val(endDate);
}else{ } else {
var input = $this.find("input[data-date]") var input = $this.find("input[data-date]")
input.val(startDate); input.val(startDate);
} }
if(singleDatePicker){ if (singleDatePicker) {
$this.data('date', startDate); $this.data('date', startDate);
$input.data('date', startDate); $input.data('date', startDate);
}else{ } else {
$this.data('startDate', startDate); $this.data('startDate', startDate);
$this.data('endDate', endDate); $this.data('endDate', endDate);
$input.data('startDate', startDate); $input.data('startDate', startDate);
$input.data('endDate', endDate); $input.data('endDate', endDate);
} }
}); });
function formatDate(date){ function formatDate(date) {
if(date){ if (date) {
if(isIso){ if (isIso) {
return date.locale('en').format(); return date.locale('en').format();
} }
return date.locale('en').format(defaultDateFormat) return date.locale('en').format(defaultDateFormat)
} }
return null; return null;
} }
function getFormattedStartDate (){
if(startDate){ function getFormattedStartDate() {
if (startDate) {
return getMoment(startDate).format(dateFormat); return getMoment(startDate).format(dateFormat);
} }
return null; return null;
} }
function getFormattedEndDate (){ function getFormattedEndDate() {
if(endDate){ if (endDate) {
return getMoment(endDate).format(dateFormat); return getMoment(endDate).format(dateFormat);
} }
return null; return null;
} }
if(singleDatePicker){ if (singleDatePicker) {
$this[0].getFormattedDate = getFormattedStartDate; $this[0].getFormattedDate = getFormattedStartDate;
$input[0].getFormattedDate = getFormattedStartDate; $input[0].getFormattedDate = getFormattedStartDate;
$dateRangePicker.getFormattedDate = getFormattedStartDate; $dateRangePicker.getFormattedDate = getFormattedStartDate;
}else{ } else {
$dateRangePicker.getFormattedStartDate = getFormattedStartDate; $dateRangePicker.getFormattedStartDate = getFormattedStartDate;
$dateRangePicker.getFormattedEndDate = getFormattedEndDate; $dateRangePicker.getFormattedEndDate = getFormattedEndDate;
$this[0].getFormattedStartDate = getFormattedStartDate; $this[0].getFormattedStartDate = getFormattedStartDate;
$this[0].getFormattedEndDate = getFormattedEndDate; $this[0].getFormattedEndDate = getFormattedEndDate;
$input[0].getFormattedStartDate = getFormattedStartDate; $input[0].getFormattedStartDate = getFormattedStartDate;
$input[0].getFormattedEndDate = getFormattedEndDate; $input[0].getFormattedEndDate = getFormattedEndDate;
} }

Loading…
Cancel
Save