mirror of https://github.com/abpframework/abp.git
1 changed files with 96 additions and 0 deletions
@ -0,0 +1,96 @@ |
|||
using System; |
|||
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-picker", TagStructure = TagStructure.NormalOrSelfClosing)] |
|||
public class AbpDatePickerTagHelper : AbpDatePickerBaseTagHelper<AbpDatePickerTagHelper> |
|||
{ |
|||
[CanBeNull] |
|||
public ModelExpression AspFor { get; set; } |
|||
|
|||
public AbpDatePickerTagHelper(AbpDatePickerTagHelperService service) : base(service) |
|||
{ |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
public class AbpDatePickerTagHelperService : AbpDatePickerBaseTagHelperService<AbpDatePickerTagHelper> |
|||
{ |
|||
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; } |
|||
|
|||
[CanBeNull] |
|||
protected virtual InputTagHelper DateTagHelper { get; set; } |
|||
|
|||
[CanBeNull] |
|||
protected virtual TagHelperOutput DateTagHelperOutput { get; set; } |
|||
protected override string GetPropertyName() |
|||
{ |
|||
return TagHelper.AspFor?.Name ?? string.Empty; |
|||
} |
|||
|
|||
protected override T GetAttributeAndModelExpression<T>(out ModelExpression modelExpression) |
|||
{ |
|||
modelExpression = TagHelper.AspFor; |
|||
return modelExpression?.ModelExplorer.GetAttribute<T>(); |
|||
} |
|||
|
|||
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) |
|||
{ |
|||
|
|||
if(TagHelper.AspFor != null) |
|||
{ |
|||
DateTagHelper = new InputTagHelper(Generator) { |
|||
InputTypeName = "hidden", ViewContext = TagHelper.ViewContext, For = TagHelper.AspFor, |
|||
}; |
|||
var attributes = new TagHelperAttributeList { { "data-date", "true" }, { "type", "hidden" } }; |
|||
DateTagHelperOutput = await DateTagHelper.ProcessAndGetOutputAsync(attributes, context, "input"); |
|||
} |
|||
|
|||
await base.ProcessAsync(context, output); |
|||
} |
|||
|
|||
|
|||
protected override int GetOrder() |
|||
{ |
|||
return TagHelper.AspFor?.Metadata.Order ?? 0; |
|||
} |
|||
|
|||
protected override void AddBaseTagAttributes(TagHelperAttributeList attributes) |
|||
{ |
|||
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)); |
|||
} |
|||
} |
|||
|
|||
protected override ModelExpression GetModelExpression() |
|||
{ |
|||
return TagHelper.AspFor; |
|||
} |
|||
|
|||
protected async override Task<string> GetValidationAsHtmlAsync(TagHelperContext context, TagHelperOutput output) |
|||
{ |
|||
return DateTagHelper != null ? await GetValidationAsHtmlByInputAsync(context, output, DateTagHelper) : string.Empty; |
|||
} |
|||
|
|||
protected override string GetExtraInputHtml(TagHelperContext context, TagHelperOutput output) |
|||
{ |
|||
return DateTagHelperOutput?.Render(Encoder); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue