mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 15:30:13 +01:00
147 lines
3.2 KiB
JavaScript
147 lines
3.2 KiB
JavaScript
// Edit start & due dates
|
|
Template.dateBadge.helpers({
|
|
canModifyCard() {
|
|
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
|
|
},
|
|
});
|
|
|
|
// editCardStartDatePopup
|
|
(class extends DatePicker {
|
|
onCreated() {
|
|
super.onCreated();
|
|
this.data().startAt && this.date.set(moment(this.data().startAt));
|
|
}
|
|
|
|
_storeDate(date) {
|
|
this.card.setStart(date);
|
|
}
|
|
|
|
_deleteDate() {
|
|
this.card.unsetStart();
|
|
}
|
|
}).register('editCardStartDatePopup');
|
|
|
|
// editCardDueDatePopup
|
|
(class extends DatePicker {
|
|
onCreated() {
|
|
super.onCreated();
|
|
this.data().dueAt && this.date.set(moment(this.data().dueAt));
|
|
}
|
|
|
|
onRendered() {
|
|
super.onRendered();
|
|
if (moment.isDate(this.card.startAt)) {
|
|
this.$('.js-datepicker').datepicker('setStartDate', this.card.startAt);
|
|
}
|
|
}
|
|
|
|
_storeDate(date) {
|
|
this.card.setDue(date);
|
|
}
|
|
|
|
_deleteDate() {
|
|
this.card.unsetDue();
|
|
}
|
|
}).register('editCardDueDatePopup');
|
|
|
|
|
|
// Display start & due dates
|
|
const CardDate = BlazeComponent.extendComponent({
|
|
template() {
|
|
return 'dateBadge';
|
|
},
|
|
|
|
onCreated() {
|
|
const self = this;
|
|
self.date = ReactiveVar();
|
|
self.now = ReactiveVar(moment());
|
|
window.setInterval(() => {
|
|
self.now.set(moment());
|
|
}, 60000);
|
|
},
|
|
|
|
showDate() {
|
|
// this will start working once mquandalle:moment
|
|
// is updated to at least moment.js 2.10.5
|
|
// until then, the date is displayed in the "L" format
|
|
return this.date.get().calendar(null, {
|
|
sameElse: 'llll',
|
|
});
|
|
},
|
|
|
|
showISODate() {
|
|
return this.date.get().toISOString();
|
|
},
|
|
});
|
|
|
|
class CardStartDate extends CardDate {
|
|
onCreated() {
|
|
super.onCreated();
|
|
const self = this;
|
|
self.autorun(() => {
|
|
self.date.set(moment(self.data().startAt));
|
|
});
|
|
}
|
|
|
|
classes() {
|
|
if (this.date.get().isBefore(this.now.get(), 'minute') &&
|
|
this.now.get().isBefore(this.data().dueAt)) {
|
|
return 'current';
|
|
}
|
|
return '';
|
|
}
|
|
|
|
showTitle() {
|
|
return `${TAPi18n.__('card-start-on')} ${this.date.get().format('LLLL')}`;
|
|
}
|
|
|
|
events() {
|
|
return super.events().concat({
|
|
'click .js-edit-date': Popup.open('editCardStartDate'),
|
|
});
|
|
}
|
|
}
|
|
CardStartDate.register('cardStartDate');
|
|
|
|
class CardDueDate extends CardDate {
|
|
onCreated() {
|
|
super.onCreated();
|
|
const self = this;
|
|
self.autorun(() => {
|
|
self.date.set(moment(self.data().dueAt));
|
|
});
|
|
}
|
|
|
|
classes() {
|
|
if (this.now.get().diff(this.date.get(), 'days') >= 2)
|
|
return 'long-overdue';
|
|
else if (this.now.get().diff(this.date.get(), 'minute') >= 0)
|
|
return 'due';
|
|
else if (this.now.get().diff(this.date.get(), 'days') >= -1)
|
|
return 'almost-due';
|
|
return '';
|
|
}
|
|
|
|
showTitle() {
|
|
return `${TAPi18n.__('card-due-on')} ${this.date.get().format('LLLL')}`;
|
|
}
|
|
|
|
events() {
|
|
return super.events().concat({
|
|
'click .js-edit-date': Popup.open('editCardDueDate'),
|
|
});
|
|
}
|
|
}
|
|
CardDueDate.register('cardDueDate');
|
|
|
|
(class extends CardStartDate {
|
|
showDate() {
|
|
return this.date.get().format('l');
|
|
}
|
|
}).register('minicardStartDate');
|
|
|
|
(class extends CardDueDate {
|
|
showDate() {
|
|
return this.date.get().format('l');
|
|
}
|
|
}).register('minicardDueDate');
|