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