From 22668a2a54da7cddd87a9121f9bab751c30af84b Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Thu, 9 Mar 2023 16:50:19 +0300 Subject: [PATCH] refactored --- .../Form/AbpDynamicformTagHelperService.cs | 36 +-- .../DatePicker/AbpDatePickerBaseTagHelper.cs | 7 +- .../Form/DatePicker/AbpDatePickerDrops.cs | 8 +- .../Form/DatePicker/AbpDatePickerOpens.cs | 12 +- .../AbpDatePickerTagHelperService.cs | 23 +- .../DatePicker/AbpDatePickerWeekNumbers.cs | 8 +- .../DatePicker/AbpDateRangePickerTagHelper.cs | 5 +- .../AbpDateRangePickerTagHelperService.cs | 45 ++-- .../DatePicker/DatePickerOptionsAttribute.cs | 2 +- .../DatePicker/DateRangePickerAttribute.cs | 5 +- .../Form/DatePicker/IAbpDatePickerOptions.cs | 117 ++++++--- .../bootstrap/dom-event-handlers.js | 226 +++++++++--------- 12 files changed, 285 insertions(+), 209 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs index 17383b46d6..775b19beb1 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs @@ -179,34 +179,37 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService(); var pickerId = modelAttribute.PickerId; - var otherModel = TagHelper.Model.ModelExplorer.Properties.SingleOrDefault(x => - x != model.ModelExplorer && x.GetAttribute()?.PickerId == pickerId); - var otherModelAttribute = otherModel?.GetAttribute(); var abpDateRangeInputTagHelper = _serviceProvider.GetRequiredService(); abpDateRangeInputTagHelper.PickerId = pickerId; abpDateRangeInputTagHelper.ViewContext = TagHelper.ViewContext; + if (modelAttribute.IsStart) { abpDateRangeInputTagHelper.AspForStart = model; - } - if (otherModelAttribute?.IsStart == false) - { - abpDateRangeInputTagHelper.AspForEnd = ModelExplorerToModelExpressionConverter(otherModel); + var otherModelExists = TryToGetOtherDateModel(model, pickerId, out var otherModel); + if (otherModelExists && otherModel.GetAttribute().IsEnd) + { + abpDateRangeInputTagHelper.AspForEnd = ModelExplorerToModelExpressionConverter(otherModel); + } } return abpDateRangeInputTagHelper; } + private bool TryToGetOtherDateModel(ModelExpression model, string pickerId, out ModelExplorer otherModel) + { + otherModel = TagHelper.Model.ModelExplorer.Properties.SingleOrDefault(x => x != model.ModelExplorer && x.GetAttribute()?.PickerId == pickerId); + return otherModel != null; + } - private bool IsDateRangeGroup(ModelExplorer modelModelExplorer) + private static bool IsDateRangeGroup(ModelExplorer modelModelExplorer) { return modelModelExplorer.GetAttribute() != null; } @@ -353,18 +356,23 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService() != null || model.ModelExplorer.GetAttribute() != null) + if (model.ModelExplorer.GetAttribute() != null || + model.ModelExplorer.GetAttribute() != null) { 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 false; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelper.cs index a85a41f7e8..55cd41f999 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelper.cs @@ -9,7 +9,8 @@ public abstract class where TTagHelper : AbpDatePickerBaseTagHelper { - private IAbpDatePickerOptions _abpDatePickerOptionsImplementation; + private readonly IAbpDatePickerOptions _abpDatePickerOptionsImplementation; + public string Label { get; set; } public string LabelTooltip { get; set; } @@ -42,15 +43,11 @@ public abstract class public bool SuppressLabel { get; set; } - - - protected AbpDatePickerBaseTagHelper(AbpDatePickerBaseTagHelperService service) : base(service) { _abpDatePickerOptionsImplementation = new AbpDatePickerOptions(); } - public string PickerId { get => _abpDatePickerOptionsImplementation.PickerId; set => _abpDatePickerOptionsImplementation.PickerId = value; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerDrops.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerDrops.cs index 7e26e27c66..c61cbfec78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerDrops.cs +++ b/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; -public enum AbpDatePickerDrops +public enum AbpDatePickerDrops : byte { - Down, - Up, - Auto + Down = 1, + Up = 2, + Auto = 3 } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerOpens.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerOpens.cs index a69ead079d..a74bf229ef 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerOpens.cs +++ b/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, - Right, - Center + Left = 1, + Right = 2, + Center = 3, } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs index 8007a13a17..e5eae85c53 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs @@ -16,14 +16,14 @@ public class AbpDatePickerTagHelperService : AbpDatePickerBaseTagHelperService l, IAbpTagHelperLocalizer tagHelperLocalizer) : base(jsonSerializer, generator, encoder, serviceProvider, l, tagHelperLocalizer) { - + } protected override TagHelperOutput TagHelperOutput { get; set; } - - [CanBeNull] + + [CanBeNull] protected virtual InputTagHelper DateTagHelper { get; set; } - + [CanBeNull] protected virtual TagHelperOutput DateTagHelperOutput { get; set; } protected override string GetPropertyName() @@ -39,12 +39,15 @@ public class AbpDatePickerTagHelperService : AbpDatePickerBaseTagHelperService { - // Start date [CanBeNull] public ModelExpression AspForStart { get; set; } - // End date [CanBeNull] public ModelExpression AspForEnd { get; set; } - public AbpDateRangePickerTagHelper(AbpDateRangePickerTagHelperService tagHelperService) : base(tagHelperService) + public AbpDateRangePickerTagHelper(AbpDateRangePickerTagHelperService tagHelperService) : + base(tagHelperService) { } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDateRangePickerTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDateRangePickerTagHelperService.cs index a869147bfd..45a083b789 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDateRangePickerTagHelperService.cs +++ b/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, HtmlEncoder encoder, IServiceProvider serviceProvider, IStringLocalizer l, - IAbpTagHelperLocalizer tagHelperLocalizer) : base(jsonSerializer, generator, encoder, serviceProvider, l, + IAbpTagHelperLocalizer tagHelperLocalizer) : + base(jsonSerializer, generator, encoder, serviceProvider, l, tagHelperLocalizer) { } @@ -26,36 +27,36 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ protected override T GetAttributeAndModelExpression(out ModelExpression modelExpression) { - modelExpression = - new[] { TagHelper.AspForStart, TagHelper.AspForEnd }.FirstOrDefault(x => - x?.ModelExplorer?.GetAttribute() != null); + modelExpression = new[] { TagHelper.AspForStart, TagHelper.AspForEnd }.FirstOrDefault(x => x?.ModelExplorer?.GetAttribute() != null); return modelExpression?.ModelExplorer.GetAttribute(); } 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" + 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"); + 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" + EndDateTagHelper = new InputTagHelper(Generator) + { + ViewContext = TagHelper.ViewContext, + For = TagHelper.AspForEnd, + InputTypeName = "hidden" }; - EndDateTagHelperOutput = - await EndDateTagHelper.ProcessAndGetOutputAsync(endDateAttributes, context, "input"); + EndDateTagHelperOutput = await EndDateTagHelper.ProcessAndGetOutputAsync(endDateAttributes, context, "input"); } await base.ProcessAsync(context, output); @@ -63,16 +64,16 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ protected override TagHelperOutput TagHelperOutput { get; set; } - [CanBeNull] + [CanBeNull] protected virtual InputTagHelper StartDateTagHelper { get; set; } - [CanBeNull] + [CanBeNull] protected virtual TagHelperOutput StartDateTagHelperOutput { get; set; } - [CanBeNull] + [CanBeNull] protected virtual InputTagHelper EndDateTagHelper { get; set; } - [CanBeNull] + [CanBeNull] protected virtual TagHelperOutput EndDateTagHelperOutput { get; set; } protected override string GetPropertyName() @@ -87,13 +88,15 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ 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)) { 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)) { attributes.Add("data-end-date", convertFuncEnd(TagHelper.AspForEnd.Model)); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/DatePickerOptionsAttribute.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/DatePickerOptionsAttribute.cs index 3b2d605be4..97943d9dcf 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/DatePickerOptionsAttribute.cs +++ b/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)] public class DatePickerOptionsAttribute : Attribute, IAbpDatePickerOptions { - private IAbpDatePickerOptions _abpDatePickerOptionsImplementation; + private readonly IAbpDatePickerOptions _abpDatePickerOptionsImplementation; public DatePickerOptionsAttribute() { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/DateRangePickerAttribute.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/DateRangePickerAttribute.cs index 7892df6918..04412ed4fc 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/DateRangePickerAttribute.cs +++ b/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 string PickerId { get; set; } + public bool IsStart { get; set; } - + + public bool IsEnd => !IsStart; + public DateRangePickerAttribute(string pickerId, bool isStart = false) { PickerId = pickerId; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/IAbpDatePickerOptions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/IAbpDatePickerOptions.cs index 993af0c41f..9bcb5adf10 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/IAbpDatePickerOptions.cs +++ b/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 string PickerId { get; set; } - // Min and Max date + + /// + /// Min date allowed + /// DateTime? MinDate { get; set; } + /// + /// Max date allowed + /// DateTime? MaxDate { get; set; } - // Max span between start and end date - object? MaxSpan { get; set; } + /// + /// Max span between start and end date + /// + object MaxSpan { get; set; } - // Show dropdowns + /// + /// Show dropdowns + /// bool? ShowDropdowns { get; set; } - // Min and Max year + /// + /// Min year allowed + /// int? MinYear { get; set; } + /// + /// Max year allowed + /// int? MaxYear { get; set; } - // Show week numbers + /// + /// Show week numbers + /// AbpDatePickerWeekNumbers WeekNumbers { get; set; } - // Time picker + /// + /// Allows users to pick a time + /// bool? TimePicker { get; set; } - // Time picker increment + /// + /// The time interval allowed + /// int? TimePickerIncrement { get; set; } - // Time picker 24 hour + /// + /// Sets the time picker hour format as 12 or 24. + /// bool? TimePicker24Hour { get; set; } - // Time picker seconds + /// + /// Allows seconds selection + /// bool? TimePickerSeconds { get; set; } - // Ranges object + /// + /// Predefined date range list + /// List Ranges { get; set; } - - // Show custom range label + + /// + /// Show custom range label + /// bool? ShowCustomRangeLabel { get; set; } - - // Always show calendar + + /// + /// Always show calendars + /// bool? AlwaysShowCalendars { get; set; } - // Opens date picker on left or right or center of the input + /// + /// The horizontal location of the datepicker + /// AbpDatePickerOpens Opens { get; set; } - // Drops down or up or auto + /// + /// The vertical location of the datepicker + /// AbpDatePickerDrops Drops { get; set; } - // Button classes - [CanBeNull] + /// + /// Button CSS classes + /// + [CanBeNull] string ButtonClasses { get; set; } - // Apply class to all buttons - [CanBeNull] + /// + /// Apply class to all buttons + /// + [CanBeNull] string ApplyButtonClasses { get; set; } - // Cancel class to all buttons - [CanBeNull] + /// + /// Cancel CSS classes to all buttons + /// + [CanBeNull] string CancelButtonClasses { get; set; } - // Locale - [CanBeNull] + /// + /// Sets a custom locale + /// + [CanBeNull] object Locale { get; set; } - // Auto apply + /// + /// Applies the value when it a date is selected + /// bool? AutoApply { get; set; } - // Linked calendars + /// + /// 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. + /// bool? LinkedCalendars { get; set; } - // Auto update input + /// + /// Updates the input automatically + /// bool? AutoUpdateInput { get; set; } // Parent element - [CanBeNull] + [CanBeNull] string ParentEl { get; set; } - [CanBeNull] + [CanBeNull] string DateFormat { get; set; } bool OpenButton { get; set; } bool ClearButton { get; set; } - + bool SingleOpenAndClearButton { get; set; } bool? IsUtc { get; set; } - + bool? IsIso { get; set; } - - [CanBeNull] + + [CanBeNull] object Options { get; set; } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js index 64ba06ff3a..3499aef9a9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js +++ b/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 = { packageName: "bootstrap-daterangepicker", @@ -207,6 +207,7 @@ if (options.label) { label.text(options.label) } + $container.append(label) var $datePicker = options.singleDatePicker ? $('') : $(''); $container.append($datePicker) @@ -292,19 +293,20 @@ return $container; } }; - - + + abp.dom.initializers.initializeDateRangePickers = function ($rootElement) { $rootElement .findWithSelf('abp-date-picker,abp-date-range-picker') .each(function () { var $this = $(this); - var $input = $(this).find('.input-group input[type="text"]') - if($input.data('daterangepicker')) { + var $input = $this.find('.input-group input[type="text"]') + if ($input.data('daterangepicker')) { 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 options = {}; options.singleDatePicker = singleDatePicker; @@ -321,29 +323,27 @@ maxYear: parseInt(moment().add(100, 'year').locale('en').format('YYYY')), locale: { direction: abp.localization.currentCulture.isRightToLeft ? 'rtl' : 'ltr', - todayLabel: abp.localization.localize('Today', 'AbpUi'), - clearLabel: abp.localization.localize('Clear', 'AbpUi'), - applyLabel: abp.localization.localize('Apply', 'AbpUi'), + todayLabel: abp.localization.localize('Today', 'AbpUi'), + clearLabel: abp.localization.localize('Clear', 'AbpUi'), + applyLabel: abp.localization.localize('Apply', 'AbpUi'), }, singleOpenAndClearButton: true }; var locale = defaultOptions.locale; $.extend(options, defaultOptions); $.extend(options, $this.data()); - if(jQuery.isEmptyObject(options.locale)) - { + if (jQuery.isEmptyObject(options.locale)) { options.locale = locale; - }else{ + } else { locale = options.locale; } + $.extend(options, $this.data("options")); - if(jQuery.isEmptyObject(options.locale)) - { + if (jQuery.isEmptyObject(options.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; } @@ -356,33 +356,35 @@ var separator = options.separator; var defaultDateFormat = "YYYY-MM-DD"; var singleOpenAndClearButton = options.singleOpenAndClearButton && $clearButton.length > 0 && $openButton.length > 0; - + const replaceButton = function (hasDate) { var hiddenClass = 'd-none'; - if(singleOpenAndClearButton){ - if(hasDate){ + + if (singleOpenAndClearButton) { + if (hasDate) { $openButton.addClass(hiddenClass); $clearButton.removeClass(hiddenClass); $clearButton.insertAfter($openButton); - }else { + } else { $openButton.removeClass(hiddenClass); $clearButton.addClass(hiddenClass); $openButton.insertAfter($clearButton); } } } - + const getMoment = function (date) { - if(!date){ + if (!date) { return isUtc ? moment.utc() : moment(); } - if(isUtc) { - return moment.utc(date,dateFormat); - }else { - return moment(date,dateFormat); + + if (isUtc) { + return moment.utc(date, dateFormat); + } else { + return moment(date, dateFormat); } } - + if (dateFormat) { options.locale = options.locale || {}; options.locale.format = dateFormat; @@ -394,25 +396,25 @@ } var startDate = options.startDate ? moment(options.startDate) : null; - if(singleDatePicker && !startDate){ + if (singleDatePicker && !startDate) { startDate = options.date ? moment(options.date) : null; } + var endDate = options.endDate ? moment(options.endDate) : null; - if (startDate) { options.startDate = startDate; } if (endDate) { options.endDate = endDate; } - - if(options.ranges){ + + if (options.ranges) { $.each(options.ranges, function (key, value) { let start = value[0]; let end; - if(value.length > 1){ + if (value.length > 1) { end = value[1]; - }else{ + } else { end = value[0]; } options.ranges[key] = [getMoment(start), getMoment(end)]; @@ -421,11 +423,11 @@ var $todayBtn = $(''); var $clearBtn = $(''); - + var extraButtons = []; if (options.showTodayButton) { extraButtons.push($todayBtn); - + $todayBtn.on('click', function () { var today = getMoment(); $input.data('daterangepicker').setStartDate(today); @@ -433,43 +435,44 @@ $input.data('daterangepicker').updateView(); }); } + if (options.showClearButton) { extraButtons.push($clearBtn); - + $clearBtn.on('click', function () { $input.val('').trigger('change'); $dateRangePicker.hide(); }); } - + if (typeof options.template !== 'string' && !(options.template instanceof $)) options.template = '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - ' ' + - '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + ' ' + + '
' + '
'; $input.daterangepicker(options); - + 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) { $dateRangePicker.container.find('.drp-buttons').prepend(value); }); } - else{ + else { var $div = $('
'); $div.css('display', 'block'); $.each(extraButtons, function (index, value) { @@ -477,14 +480,11 @@ }); $div.insertAfter($dateRangePicker.container.find('.drp-buttons')); - } - - - $dateRangePicker.outsideClick = function(e) { + + $dateRangePicker.outsideClick = function (e) { var target = $(e.target); - // if the page is clicked anywhere except within the daterangerpicker/button - // itself then call this.hide() + // if the page is clicked anywhere except within the daterangerpicker/button itself then call this.hide() if ( // ie modal dialog fix e.type == "focusin" || @@ -492,24 +492,27 @@ target.closest(this.container).length || target.closest('.calendar-table').length || target.closest($openButton).length - ) return; + ) { + return; + } + this.hide(); this.element.trigger('outsideClick.daterangepicker', this); }; - + $openButton.on('click', function () { $dateRangePicker.toggle(); }); - + const extendDateFormat = function (format) { - if(timePicker){ - if(timePicker24Hour){ - if(timePickerSeconds){ + if (timePicker) { + if (timePicker24Hour) { + if (timePickerSeconds) { format += " HH:mm:ss"; - }else{ + } else { format += " HH:mm"; } - }else { + } else { if (timePickerSeconds) { format += ' ' + " hh:mm:ss A" } else { @@ -517,33 +520,34 @@ } } } + return format; } - + defaultDateFormat = extendDateFormat(defaultDateFormat); - if(!dateFormat) { + if (!dateFormat) { dateFormat = extendDateFormat(moment.localeData().longDateFormat('L')) } - - if(!separator) { + + if (!separator) { separator = $dateRangePicker.locale.separator; } - - if(singleDatePicker){ - if(startDate){ + + if (singleDatePicker) { + if (startDate) { $input.val(startDate.format(dateFormat)); } - }else{ - if(startDate && endDate){ + } else { + if (startDate && endDate) { $input.val(startDate.format(dateFormat) + separator + endDate.format(dateFormat)); } } - + $input.on('apply.daterangepicker', function (ev, picker) { - if(singleDatePicker){ + if (singleDatePicker) { $(this).val(picker.startDate.format(dateFormat)); - }else{ + } else { $(this).val(picker.startDate.format(dateFormat) + separator + picker.endDate.format(dateFormat)); } @@ -554,6 +558,7 @@ $(this).val(''); $(this).trigger('change'); }); + $input.on('show.daterangepicker', function (ev, picker) { var momentStartDate = getMoment(startDate); var momentEndDate = getMoment(endDate); @@ -564,7 +569,6 @@ picker.setEndDate(momentEndDate); } }); - $clearButton.on('click', function () { $input.val(''); @@ -572,9 +576,9 @@ }); $input.on('change', function () { - if($(this).val() !== ''){ + if ($(this).val() !== '') { replaceButton(true); - }else{ + } else { replaceButton(false); } var dates = $(this).val().split(separator); @@ -582,91 +586,97 @@ startDate = getMoment(dates[0]); if (!startDate.isValid()) { startDate = null; - }else{ + } else { startDate = formatDate(startDate); } endDate = getMoment(dates[1]); if (!endDate.isValid()) { endDate = null; - }else{ + } else { endDate = formatDate(endDate); } } else { - if(dates[0]){ + if (dates[0]) { startDate = getMoment(dates[0]); if (!startDate.isValid()) { startDate = null; - }else{ + } else { startDate = formatDate(startDate); } } - else{ + else { startDate = null; } + endDate = null; } - if(!startDate){ + + if (!startDate) { replaceButton(false); $(this).val(''); $dateRangePicker.setStartDate(getMoment()); $dateRangePicker.setEndDate(getMoment()); } - if(!singleDatePicker){ + if (!singleDatePicker) { var input1 = $this.find("input[data-start-date]") input1.val(startDate); var input2 = $this.find("input[data-end-date]") input2.val(endDate); - }else{ + } else { var input = $this.find("input[data-date]") input.val(startDate); } - if(singleDatePicker){ + if (singleDatePicker) { $this.data('date', startDate); $input.data('date', startDate); - }else{ + } else { $this.data('startDate', startDate); $this.data('endDate', endDate); $input.data('startDate', startDate); $input.data('endDate', endDate); } }); - - function formatDate(date){ - if(date){ - if(isIso){ + + function formatDate(date) { + if (date) { + if (isIso) { return date.locale('en').format(); } return date.locale('en').format(defaultDateFormat) } + return null; } - function getFormattedStartDate (){ - if(startDate){ + + function getFormattedStartDate() { + if (startDate) { return getMoment(startDate).format(dateFormat); } + return null; } - - function getFormattedEndDate (){ - if(endDate){ + + function getFormattedEndDate() { + if (endDate) { return getMoment(endDate).format(dateFormat); } + return null; } - - if(singleDatePicker){ + + if (singleDatePicker) { $this[0].getFormattedDate = getFormattedStartDate; $input[0].getFormattedDate = getFormattedStartDate; $dateRangePicker.getFormattedDate = getFormattedStartDate; - }else{ + } else { $dateRangePicker.getFormattedStartDate = getFormattedStartDate; $dateRangePicker.getFormattedEndDate = getFormattedEndDate; - + $this[0].getFormattedStartDate = getFormattedStartDate; $this[0].getFormattedEndDate = getFormattedEndDate; - + $input[0].getFormattedStartDate = getFormattedStartDate; $input[0].getFormattedEndDate = getFormattedEndDate; }