mirror of
https://github.com/wekan/wekan.git
synced 2025-04-24 22:17:16 -04:00
186 lines
4.3 KiB
JavaScript
186 lines
4.3 KiB
JavaScript
Template.cardCustomFieldsPopup.helpers({
|
|
hasCustomField() {
|
|
const card = Cards.findOne(Session.get('currentCard'));
|
|
const customFieldId = this._id;
|
|
return card.customFieldIndex(customFieldId) > -1;
|
|
},
|
|
});
|
|
|
|
Template.cardCustomFieldsPopup.events({
|
|
'click .js-select-field'(event) {
|
|
const card = Cards.findOne(Session.get('currentCard'));
|
|
const customFieldId = this._id;
|
|
card.toggleCustomField(customFieldId);
|
|
event.preventDefault();
|
|
},
|
|
'click .js-settings'(event) {
|
|
EscapeActions.executeUpTo('detailsPane');
|
|
Sidebar.setView('customFields');
|
|
event.preventDefault();
|
|
},
|
|
});
|
|
|
|
// cardCustomField
|
|
const CardCustomField = BlazeComponent.extendComponent({
|
|
getTemplate() {
|
|
return `cardCustomField-${this.data().definition.type}`;
|
|
},
|
|
|
|
onCreated() {
|
|
const self = this;
|
|
self.card = Cards.findOne(Session.get('currentCard'));
|
|
self.customFieldId = this.data()._id;
|
|
},
|
|
|
|
canModifyCard() {
|
|
return (
|
|
Meteor.user() &&
|
|
Meteor.user().isBoardMember() &&
|
|
!Meteor.user().isCommentOnly()
|
|
);
|
|
},
|
|
});
|
|
CardCustomField.register('cardCustomField');
|
|
|
|
// cardCustomField-text
|
|
(class extends CardCustomField {
|
|
onCreated() {
|
|
super.onCreated();
|
|
}
|
|
|
|
events() {
|
|
return [
|
|
{
|
|
'submit .js-card-customfield-text'(event) {
|
|
event.preventDefault();
|
|
const value = this.currentComponent().getValue();
|
|
this.card.setCustomField(this.customFieldId, value);
|
|
},
|
|
},
|
|
];
|
|
}
|
|
}.register('cardCustomField-text'));
|
|
|
|
// cardCustomField-number
|
|
(class extends CardCustomField {
|
|
onCreated() {
|
|
super.onCreated();
|
|
}
|
|
|
|
events() {
|
|
return [
|
|
{
|
|
'submit .js-card-customfield-number'(event) {
|
|
event.preventDefault();
|
|
const value = parseInt(this.find('input').value, 10);
|
|
this.card.setCustomField(this.customFieldId, value);
|
|
},
|
|
},
|
|
];
|
|
}
|
|
}.register('cardCustomField-number'));
|
|
|
|
// cardCustomField-date
|
|
(class extends CardCustomField {
|
|
onCreated() {
|
|
super.onCreated();
|
|
const self = this;
|
|
self.date = ReactiveVar();
|
|
self.now = ReactiveVar(moment());
|
|
window.setInterval(() => {
|
|
self.now.set(moment());
|
|
}, 60000);
|
|
|
|
self.autorun(() => {
|
|
self.date.set(moment(self.data().value));
|
|
});
|
|
}
|
|
|
|
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();
|
|
}
|
|
|
|
classes() {
|
|
if (
|
|
this.date.get().isBefore(this.now.get(), 'minute') &&
|
|
this.now.get().isBefore(this.data().value)
|
|
) {
|
|
return 'current';
|
|
}
|
|
return '';
|
|
}
|
|
|
|
showTitle() {
|
|
return `${TAPi18n.__('card-start-on')} ${this.date.get().format('LLLL')}`;
|
|
}
|
|
|
|
events() {
|
|
return [
|
|
{
|
|
'click .js-edit-date': Popup.open('cardCustomField-date'),
|
|
},
|
|
];
|
|
}
|
|
}.register('cardCustomField-date'));
|
|
|
|
// cardCustomField-datePopup
|
|
(class extends DatePicker {
|
|
onCreated() {
|
|
super.onCreated();
|
|
const self = this;
|
|
self.card = Cards.findOne(Session.get('currentCard'));
|
|
self.customFieldId = this.data()._id;
|
|
this.data().value && this.date.set(moment(this.data().value));
|
|
}
|
|
|
|
_storeDate(date) {
|
|
this.card.setCustomField(this.customFieldId, date);
|
|
}
|
|
|
|
_deleteDate() {
|
|
this.card.setCustomField(this.customFieldId, '');
|
|
}
|
|
}.register('cardCustomField-datePopup'));
|
|
|
|
// cardCustomField-dropdown
|
|
(class extends CardCustomField {
|
|
onCreated() {
|
|
super.onCreated();
|
|
this._items = this.data().definition.settings.dropdownItems;
|
|
this.items = this._items.slice(0);
|
|
this.items.unshift({
|
|
_id: '',
|
|
name: TAPi18n.__('custom-field-dropdown-none'),
|
|
});
|
|
}
|
|
|
|
selectedItem() {
|
|
const selected = this._items.find(item => {
|
|
return item._id === this.data().value;
|
|
});
|
|
return selected
|
|
? selected.name
|
|
: TAPi18n.__('custom-field-dropdown-unknown');
|
|
}
|
|
|
|
events() {
|
|
return [
|
|
{
|
|
'submit .js-card-customfield-dropdown'(event) {
|
|
event.preventDefault();
|
|
const value = this.find('select').value;
|
|
this.card.setCustomField(this.customFieldId, value);
|
|
},
|
|
},
|
|
];
|
|
}
|
|
}.register('cardCustomField-dropdown'));
|