mirror of https://github.com/abpframework/abp.git
1 changed files with 146 additions and 0 deletions
@ -0,0 +1,146 @@ |
|||||
|
using System; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Text.Encodings.Web; |
||||
|
using System.Threading.Tasks; |
||||
|
using JetBrains.Annotations; |
||||
|
using Localization.Resources.AbpUi; |
||||
|
using Microsoft.AspNetCore.Mvc.TagHelpers; |
||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures; |
||||
|
using Microsoft.AspNetCore.Razor.TagHelpers; |
||||
|
using Microsoft.Extensions.Localization; |
||||
|
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; |
||||
|
using Volo.Abp.Json; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.DatePicker; |
||||
|
|
||||
|
[HtmlTargetElement("abp-date-range-picker", TagStructure = TagStructure.NormalOrSelfClosing)] |
||||
|
public class AbpDateRangePickerTagHelper : AbpDatePickerBaseTagHelper<AbpDateRangePickerTagHelper> |
||||
|
{ |
||||
|
// Start date
|
||||
|
[CanBeNull] |
||||
|
public ModelExpression AspForStart { get; set; } |
||||
|
|
||||
|
// End date
|
||||
|
[CanBeNull] |
||||
|
public ModelExpression AspForEnd { get; set; } |
||||
|
|
||||
|
public AbpDateRangePickerTagHelper(AbpDateRangePickerTagHelperService tagHelperService) : base(tagHelperService) |
||||
|
{ |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperService<AbpDateRangePickerTagHelper> |
||||
|
{ |
||||
|
public AbpDateRangePickerTagHelperService(IJsonSerializer jsonSerializer, IHtmlGenerator generator, |
||||
|
HtmlEncoder encoder, IServiceProvider serviceProvider, IStringLocalizer<AbpUiResource> l, |
||||
|
IAbpTagHelperLocalizer tagHelperLocalizer) : base(jsonSerializer, generator, encoder, serviceProvider, l, |
||||
|
tagHelperLocalizer) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
protected override string TagName { get; set; } = "abp-date-range-picker"; |
||||
|
|
||||
|
protected override T GetAttributeAndModelExpression<T>(out ModelExpression modelExpression) |
||||
|
{ |
||||
|
modelExpression = |
||||
|
new[] { TagHelper.AspForStart, TagHelper.AspForEnd }.FirstOrDefault(x => |
||||
|
x?.ModelExplorer?.GetAttribute<T>() != null); |
||||
|
return modelExpression?.ModelExplorer.GetAttribute<T>(); |
||||
|
} |
||||
|
|
||||
|
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) |
||||
|
{ |
||||
|
|
||||
|
if (TagHelper.AspForStart != null) |
||||
|
{ |
||||
|
var startDateAttributes = |
||||
|
new TagHelperAttributeList { { "data-start-date", "true" }, { "type", "hidden" } }; |
||||
|
StartDateTagHelper = new InputTagHelper(Generator) { |
||||
|
ViewContext = TagHelper.ViewContext, For = TagHelper.AspForStart, InputTypeName = "hidden" |
||||
|
}; |
||||
|
|
||||
|
StartDateTagHelperOutput = |
||||
|
await StartDateTagHelper.ProcessAndGetOutputAsync(startDateAttributes, context, "input"); |
||||
|
} |
||||
|
|
||||
|
if (TagHelper.AspForEnd != null) |
||||
|
{ |
||||
|
var endDateAttributes = new TagHelperAttributeList { { "data-end-date", "true" }, { "type", "hidden" } }; |
||||
|
EndDateTagHelper = new InputTagHelper(Generator) { |
||||
|
ViewContext = TagHelper.ViewContext, For = TagHelper.AspForEnd,InputTypeName = "hidden" |
||||
|
}; |
||||
|
|
||||
|
EndDateTagHelperOutput = |
||||
|
await EndDateTagHelper.ProcessAndGetOutputAsync(endDateAttributes, context, "input"); |
||||
|
} |
||||
|
|
||||
|
await base.ProcessAsync(context, output); |
||||
|
} |
||||
|
|
||||
|
protected override TagHelperOutput TagHelperOutput { get; set; } |
||||
|
|
||||
|
[CanBeNull] |
||||
|
protected virtual InputTagHelper StartDateTagHelper { get; set; } |
||||
|
|
||||
|
[CanBeNull] |
||||
|
protected virtual TagHelperOutput StartDateTagHelperOutput { get; set; } |
||||
|
|
||||
|
[CanBeNull] |
||||
|
protected virtual InputTagHelper EndDateTagHelper { get; set; } |
||||
|
|
||||
|
[CanBeNull] |
||||
|
protected virtual TagHelperOutput EndDateTagHelperOutput { get; set; } |
||||
|
|
||||
|
protected override string GetPropertyName() |
||||
|
{ |
||||
|
return TagHelper.AspForStart?.Name ?? string.Empty; |
||||
|
} |
||||
|
|
||||
|
protected override int GetOrder() |
||||
|
{ |
||||
|
return TagHelper.Order; |
||||
|
} |
||||
|
|
||||
|
protected override void AddBaseTagAttributes(TagHelperAttributeList attributes) |
||||
|
{ |
||||
|
if (TagHelper.AspForStart != null && TagHelper.AspForStart.Model != null && |
||||
|
SupportedInputTypes.TryGetValue(TagHelper.AspForStart.Metadata.ModelType, out var convertFuncStart)) |
||||
|
{ |
||||
|
attributes.Add("data-start-date", convertFuncStart(TagHelper.AspForStart.Model)); |
||||
|
} |
||||
|
|
||||
|
if (TagHelper.AspForEnd != null && TagHelper.AspForEnd.Model != null && |
||||
|
SupportedInputTypes.TryGetValue(TagHelper.AspForEnd.Metadata.ModelType, out var convertFuncEnd)) |
||||
|
{ |
||||
|
attributes.Add("data-end-date", convertFuncEnd(TagHelper.AspForEnd.Model)); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
protected override string GetExtraInputHtml(TagHelperContext context, TagHelperOutput output) |
||||
|
{ |
||||
|
return StartDateTagHelperOutput?.Render(Encoder) + EndDateTagHelperOutput?.Render(Encoder); |
||||
|
} |
||||
|
|
||||
|
protected override ModelExpression GetModelExpression() |
||||
|
{ |
||||
|
return TagHelper.AspForStart; |
||||
|
} |
||||
|
|
||||
|
protected async override Task<string> GetValidationAsHtmlAsync(TagHelperContext context, TagHelperOutput output) |
||||
|
{ |
||||
|
var validationHtml = string.Empty; |
||||
|
|
||||
|
if (StartDateTagHelper != null) |
||||
|
{ |
||||
|
validationHtml += await GetValidationAsHtmlByInputAsync(context, output, StartDateTagHelper); |
||||
|
} |
||||
|
|
||||
|
if (EndDateTagHelper != null) |
||||
|
{ |
||||
|
validationHtml += await GetValidationAsHtmlByInputAsync(context, output, EndDateTagHelper); |
||||
|
} |
||||
|
|
||||
|
return validationHtml; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue