Changed wekan-boostrap-datepicker to HTML datepicker.

Thanks to xet7 !
This commit is contained in:
Lauri Ojansivu 2025-10-16 23:19:26 +03:00
parent 33e4b046e8
commit 79b94824ef
112 changed files with 192 additions and 5589 deletions

View file

@ -33,42 +33,29 @@ export class DatePicker extends BlazeComponent {
}
onRendered() {
const $picker = this.$('.js-datepicker')
.datepicker({
todayHighlight: true,
todayBtn: 'linked',
language: TAPi18n.getLanguage(),
weekStart: this.startDayOfWeek(),
calendarWeeks: true,
})
.on(
'changeDate',
function(evt) {
this.find('#date').value = moment(evt.date).format('L');
this.error.set('');
const timeInput = this.find('#time');
timeInput.focus();
if (!timeInput.value && this.defaultTime) {
const currentHour = evt.date.getHours();
const defaultMoment = moment(
currentHour > 0 ? evt.date : this.defaultTime,
); // default to 8:00 am local time
timeInput.value = defaultMoment.format('LT');
}
}.bind(this),
);
// Set initial values for native HTML inputs
if (this.date.get().isValid()) {
$picker.datepicker('update', this.date.get().toDate());
const dateInput = this.find('#date');
const timeInput = this.find('#time');
if (dateInput) {
dateInput.value = this.date.get().format('YYYY-MM-DD');
}
if (timeInput && !timeInput.value && this.defaultTime) {
const defaultMoment = moment(this.defaultTime);
timeInput.value = defaultMoment.format('HH:mm');
} else if (timeInput && this.date.get().isValid()) {
timeInput.value = this.date.get().format('HH:mm');
}
}
}
showDate() {
if (this.date.get().isValid()) return this.date.get().format('L');
if (this.date.get().isValid()) return this.date.get().format('YYYY-MM-DD');
return '';
}
showTime() {
if (this.date.get().isValid()) return this.date.get().format('LT');
if (this.date.get().isValid()) return this.date.get().format('HH:mm');
return '';
}
dateFormat() {
@ -81,54 +68,51 @@ export class DatePicker extends BlazeComponent {
events() {
return [
{
'keyup .js-date-field'() {
// parse for localized date format in strict mode
const dateMoment = moment(this.find('#date').value, 'L', true);
if (dateMoment.isValid()) {
this.error.set('');
this.$('.js-datepicker').datepicker('update', dateMoment.toDate());
'change .js-date-field'() {
// Native HTML date input validation
const dateValue = this.find('#date').value;
if (dateValue) {
const dateMoment = moment(dateValue, 'YYYY-MM-DD', true);
if (dateMoment.isValid()) {
this.error.set('');
} else {
this.error.set('invalid-date');
}
}
},
'keyup .js-time-field'() {
// parse for localized time format in strict mode
const dateMoment = moment(
this.find('#time').value,
adjustedTimeFormat(),
true,
);
if (dateMoment.isValid()) {
this.error.set('');
'change .js-time-field'() {
// Native HTML time input validation
const timeValue = this.find('#time').value;
if (timeValue) {
const timeMoment = moment(timeValue, 'HH:mm', true);
if (timeMoment.isValid()) {
this.error.set('');
} else {
this.error.set('invalid-time');
}
}
},
'submit .edit-date'(evt) {
evt.preventDefault();
// if no time was given, init with 12:00
const time =
evt.target.time.value ||
moment(new Date().setHours(12, 0, 0)).format('LT');
const newTime = moment(time, adjustedTimeFormat(), true);
const newDate = moment(evt.target.date.value, 'L', true);
const dateString = `${evt.target.date.value} ${time}`;
const newCompleteDate = moment(
dateString,
`L ${adjustedTimeFormat()}`,
true,
);
if (!newTime.isValid()) {
this.error.set('invalid-time');
evt.target.time.focus();
}
if (!newDate.isValid()) {
const dateValue = evt.target.date.value;
const timeValue = evt.target.time.value || '12:00'; // Default to 12:00 if no time given
if (!dateValue) {
this.error.set('invalid-date');
evt.target.date.focus();
return;
}
if (newCompleteDate.isValid()) {
this._storeDate(newCompleteDate.toDate());
Popup.back();
} else if (!this.error) {
const newCompleteDate = moment(`${dateValue} ${timeValue}`, 'YYYY-MM-DD HH:mm', true);
if (!newCompleteDate.isValid()) {
this.error.set('invalid');
return;
}
this._storeDate(newCompleteDate.toDate());
Popup.back();
},
'click .js-delete-date'(evt) {
evt.preventDefault();