summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.eslintrc.json4
-rw-r--r--client/components/cards/cardCustomFields.js256
-rw-r--r--client/components/lists/listBody.js6
-rw-r--r--client/components/sidebar/sidebarCustomFields.js27
-rw-r--r--client/lib/datepicker.js150
-rw-r--r--models/cards.js17
-rw-r--r--models/customFields.js18
7 files changed, 242 insertions, 236 deletions
diff --git a/.eslintrc.json b/.eslintrc.json
index 0a9f3c90..06d3f001 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -32,7 +32,7 @@
"comma-spacing": 2,
"comma-style": 2,
"eol-last": 2,
- "linebreak-style": [2, "unix"],
+ "linebreak-style": [2, "windows"],
"new-parens": 2,
"no-lonely-if": 2,
"no-multiple-empty-lines": 2,
@@ -100,7 +100,9 @@
"Attachments": true,
"Boards": true,
"CardComments": true,
+ "DatePicker" : true,
"Cards": true,
+ "CustomFields": true,
"Lists": true,
"UnsavedEditCollection": true,
"Users": true,
diff --git a/client/components/cards/cardCustomFields.js b/client/components/cards/cardCustomFields.js
index e014de4a..821ca02b 100644
--- a/client/components/cards/cardCustomFields.js
+++ b/client/components/cards/cardCustomFields.js
@@ -1,179 +1,179 @@
Template.cardCustomFieldsPopup.helpers({
- hasCustomField() {
- const card = Cards.findOne(Session.get('currentCard'));
- const customFieldId = this._id;
- return card.customFieldIndex(customFieldId) > -1;
- },
+ hasCustomField() {
+ const card = Cards.findOne(Session.get('currentCard'));
+ const customFieldId = this._id;
+ return card.customFieldIndex(customFieldId) > -1;
+ },
});
Template.cardCustomFieldsPopup.events({
- 'click .js-select-field'(evt) {
- const card = Cards.findOne(Session.get('currentCard'));
- const customFieldId = this._id;
- card.toggleCustomField(customFieldId);
- evt.preventDefault();
- },
- 'click .js-settings'(evt) {
- EscapeActions.executeUpTo('detailsPane');
- Sidebar.setView('customFields');
- evt.preventDefault();
- }
+ 'click .js-select-field'(evt) {
+ const card = Cards.findOne(Session.get('currentCard'));
+ const customFieldId = this._id;
+ card.toggleCustomField(customFieldId);
+ evt.preventDefault();
+ },
+ 'click .js-settings'(evt) {
+ EscapeActions.executeUpTo('detailsPane');
+ Sidebar.setView('customFields');
+ evt.preventDefault();
+ },
});
// cardCustomField
const CardCustomField = BlazeComponent.extendComponent({
- getTemplate() {
- return 'cardCustomField-' + this.data().definition.type;
- },
+ getTemplate() {
+ return 'cardCustomField-${this.data().definition.type}';
+ },
- onCreated() {
- const self = this;
- self.card = Cards.findOne(Session.get('currentCard'));
- self.customFieldId = this.data()._id;
- },
+ 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();
- },
+ canModifyCard() {
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
+ },
});
CardCustomField.register('cardCustomField');
// cardCustomField-text
(class extends CardCustomField {
- onCreated() {
- super.onCreated();
- }
+ onCreated() {
+ super.onCreated();
+ }
- events() {
- return [{
- 'submit .js-card-customfield-text'(evt) {
- evt.preventDefault();
- const value = this.currentComponent().getValue();
- this.card.setCustomField(this.customFieldId, value);
- },
- }];
- }
+ events() {
+ return [{
+ 'submit .js-card-customfield-text'(evt) {
+ evt.preventDefault();
+ const value = this.currentComponent().getValue();
+ this.card.setCustomField(this.customFieldId, value);
+ },
+ }];
+ }
}).register('cardCustomField-text');
// cardCustomField-number
(class extends CardCustomField {
- onCreated() {
- super.onCreated();
- }
+ onCreated() {
+ super.onCreated();
+ }
- events() {
- return [{
- 'submit .js-card-customfield-number'(evt) {
- evt.preventDefault();
- const value = parseInt(this.find('input').value);
- this.card.setCustomField(this.customFieldId, value);
- },
- }];
- }
+ events() {
+ return [{
+ 'submit .js-card-customfield-number'(evt) {
+ evt.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() {
+ 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',
- });
- }
+ return this.date.get().calendar(null, {
+ sameElse: 'llll',
+ });
+ }
- showISODate() {
- return this.date.get().toISOString();
- }
+ showISODate() {
+ return this.date.get().toISOString();
+ }
- classes() {
- if (this.date.get().isBefore(this.now.get(), 'minute') &&
+ classes() {
+ if (this.date.get().isBefore(this.now.get(), 'minute') &&
this.now.get().isBefore(this.data().value)) {
- return 'current';
- }
- return '';
+ return 'current';
}
+ return '';
+ }
- showTitle() {
- return `${TAPi18n.__('card-start-on')} ${this.date.get().format('LLLL')}`;
- }
+ showTitle() {
+ return `${TAPi18n.__('card-start-on')} ${this.date.get().format('LLLL')}`;
+ }
- events() {
- return [{
- 'click .js-edit-date': Popup.open('cardCustomField-date'),
- }];
- }
+ 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, '');
- }
+ 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'(evt) {
- evt.preventDefault();
- const value = this.find('select').value;
- this.card.setCustomField(this.customFieldId, value);
- },
- }];
- }
+ 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'(evt) {
+ evt.preventDefault();
+ const value = this.find('select').value;
+ this.card.setCustomField(this.customFieldId, value);
+ },
+ }];
+ }
-}).register('cardCustomField-dropdown'); \ No newline at end of file
+}).register('cardCustomField-dropdown');
diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js
index 24e5cf5d..4bf7b369 100644
--- a/client/components/lists/listBody.js
+++ b/client/components/lists/listBody.js
@@ -36,9 +36,9 @@ BlazeComponent.extendComponent({
const members = formComponent.members.get();
const labelIds = formComponent.labels.get();
const customFields = formComponent.customFields.get();
- console.log("members", members);
- console.log("labelIds", labelIds);
- console.log("customFields", customFields);
+ //console.log('members', members);
+ //console.log('labelIds', labelIds);
+ //console.log('customFields', customFields);
const boardId = this.data().board()._id;
let swimlaneId = '';
diff --git a/client/components/sidebar/sidebarCustomFields.js b/client/components/sidebar/sidebarCustomFields.js
index cfa21beb..9fed163c 100644
--- a/client/components/sidebar/sidebarCustomFields.js
+++ b/client/components/sidebar/sidebarCustomFields.js
@@ -27,11 +27,11 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
types() {
const currentType = this.data().type;
return this._types.
- map(type => {return {
+ map((type) => {return {
value: type,
- name: TAPi18n.__('custom-field-' + type),
- selected: type == currentType,
- }});
+ name: TAPi18n.__('custom-field-${type}'),
+ selected: type === currentType,
+ };});
},
isTypeNotSelected(type) {
@@ -39,7 +39,7 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
},
getDropdownItems() {
- var items = this.dropdownItems.get();
+ const items = this.dropdownItems.get();
Array.from(this.findAll('.js-field-settings-dropdown input')).forEach((el, index) => {
//console.log('each item!', index, el.value);
if (!items[index]) items[index] = {
@@ -51,12 +51,13 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
},
getSettings() {
- let settings = {};
+ const settings = {};
switch (this.type.get()) {
- case 'dropdown':
- let dropdownItems = this.getDropdownItems().filter(item => !!item.name.trim());
- settings.dropdownItems = dropdownItems;
- break;
+ case 'dropdown': {
+ const dropdownItems = this.getDropdownItems().filter((item) => !!item.name.trim());
+ settings.dropdownItems = dropdownItems;
+ break;
+ }
}
return settings;
},
@@ -69,7 +70,7 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
},
'keydown .js-dropdown-item.last'(evt) {
if (evt.target.value.trim() && evt.keyCode === 13) {
- let items = this.getDropdownItems();
+ const items = this.getDropdownItems();
this.dropdownItems.set(items);
evt.target.value = '';
}
@@ -90,8 +91,8 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
name: this.find('.js-field-name').value.trim(),
type: this.type.get(),
settings: this.getSettings(),
- showOnCard: this.find('.js-field-show-on-card.is-checked') != null
- }
+ showOnCard: this.find('.js-field-show-on-card.is-checked') !== null,
+ };
// insert or update
if (!this.data()._id) {
diff --git a/client/lib/datepicker.js b/client/lib/datepicker.js
index aac061cf..947970ee 100644
--- a/client/lib/datepicker.js
+++ b/client/lib/datepicker.js
@@ -1,86 +1,86 @@
DatePicker = BlazeComponent.extendComponent({
- template() {
- return 'datepicker';
- },
+ template() {
+ return 'datepicker';
+ },
- onCreated() {
- this.error = new ReactiveVar('');
- this.card = this.data();
- this.date = new ReactiveVar(moment.invalid());
- },
+ onCreated() {
+ this.error = new ReactiveVar('');
+ this.card = this.data();
+ this.date = new ReactiveVar(moment.invalid());
+ },
- onRendered() {
- const $picker = this.$('.js-datepicker').datepicker({
- todayHighlight: true,
- todayBtn: 'linked',
- language: TAPi18n.getLanguage(),
- }).on('changeDate', function(evt) {
- this.find('#date').value = moment(evt.date).format('L');
- this.error.set('');
- this.find('#time').focus();
- }.bind(this));
+ onRendered() {
+ const $picker = this.$('.js-datepicker').datepicker({
+ todayHighlight: true,
+ todayBtn: 'linked',
+ language: TAPi18n.getLanguage(),
+ }).on('changeDate', function(evt) {
+ this.find('#date').value = moment(evt.date).format('L');
+ this.error.set('');
+ this.find('#time').focus();
+ }.bind(this));
- if (this.date.get().isValid()) {
- $picker.datepicker('update', this.date.get().toDate());
- }
- },
+ if (this.date.get().isValid()) {
+ $picker.datepicker('update', this.date.get().toDate());
+ }
+ },
- showDate() {
- if (this.date.get().isValid())
- return this.date.get().format('L');
- return '';
- },
- showTime() {
- if (this.date.get().isValid())
- return this.date.get().format('LT');
- return '';
- },
- dateFormat() {
- return moment.localeData().longDateFormat('L');
- },
- timeFormat() {
- return moment.localeData().longDateFormat('LT');
- },
+ showDate() {
+ if (this.date.get().isValid())
+ return this.date.get().format('L');
+ return '';
+ },
+ showTime() {
+ if (this.date.get().isValid())
+ return this.date.get().format('LT');
+ return '';
+ },
+ dateFormat() {
+ return moment.localeData().longDateFormat('L');
+ },
+ timeFormat() {
+ return moment.localeData().longDateFormat('LT');
+ },
- events() {
- return [{
- 'keyup .js-date-field'() {
+ 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());
- }
- },
- 'keyup .js-time-field'() {
+ const dateMoment = moment(this.find('#date').value, 'L', true);
+ if (dateMoment.isValid()) {
+ this.error.set('');
+ this.$('.js-datepicker').datepicker('update', dateMoment.toDate());
+ }
+ },
+ 'keyup .js-time-field'() {
// parse for localized time format in strict mode
- const dateMoment = moment(this.find('#time').value, 'LT', true);
- if (dateMoment.isValid()) {
- this.error.set('');
- }
- },
- 'submit .edit-date'(evt) {
- evt.preventDefault();
+ const dateMoment = moment(this.find('#time').value, 'LT', true);
+ if (dateMoment.isValid()) {
+ this.error.set('');
+ }
+ },
+ '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 time = evt.target.time.value || moment(new Date().setHours(12, 0, 0)).format('LT');
- const dateString = `${evt.target.date.value} ${time}`;
- const newDate = moment(dateString, 'L LT', true);
- if (newDate.isValid()) {
- this._storeDate(newDate.toDate());
- Popup.close();
- }
- else {
- this.error.set('invalid-date');
- evt.target.date.focus();
- }
- },
- 'click .js-delete-date'(evt) {
- evt.preventDefault();
- this._deleteDate();
- Popup.close();
- },
- }];
- },
-}); \ No newline at end of file
+ const dateString = `${evt.target.date.value} ${time}`;
+ const newDate = moment(dateString, 'L LT', true);
+ if (newDate.isValid()) {
+ this._storeDate(newDate.toDate());
+ Popup.close();
+ }
+ else {
+ this.error.set('invalid-date');
+ evt.target.date.focus();
+ }
+ },
+ 'click .js-delete-date'(evt) {
+ evt.preventDefault();
+ this._deleteDate();
+ Popup.close();
+ },
+ }];
+ },
+});
diff --git a/models/cards.js b/models/cards.js
index 8b917ee3..d3a741bb 100644
--- a/models/cards.js
+++ b/models/cards.js
@@ -51,10 +51,10 @@ Cards.attachSchema(new SimpleSchema({
type: String,
},
value: {
- type: Match.OneOf(String,Number,Boolean,Date),
+ type: Match.OneOf(String, Number, Boolean, Date),
optional: true,
},
- })
+ }),
},
dateLastActivity: {
type: Date,
@@ -225,9 +225,9 @@ Cards.helpers({
_id: customField._id,
value: customField.value,
definition: definitions.find((definition) => {
- return definition._id == customField._id;
- })
- }
+ return definition._id === customField._id;
+ }),
+ };
});
},
@@ -331,10 +331,13 @@ Cards.mutations({
// todo
const index = this.customFieldIndex(customFieldId);
if (index > -1) {
- var update = {$set: {}};
- update.$set["customFields." + index + ".value"] = value;
+ const update = {$set: {}};
+ update.$set['customFields.${index}.value'] = value;
return update;
}
+ // TODO
+ // Ignatz 18.05.2018: Return null to silence ESLint. No Idea if that is correct
+ return null;
},
setCover(coverId) {
diff --git a/models/customFields.js b/models/customFields.js
index 57875b6e..6c5fe7c4 100644
--- a/models/customFields.js
+++ b/models/customFields.js
@@ -9,14 +9,14 @@ CustomFields.attachSchema(new SimpleSchema({
},
type: {
type: String,
- allowedValues: ['text', 'number', 'date', 'dropdown']
+ allowedValues: ['text', 'number', 'date', 'dropdown'],
},
settings: {
type: Object,
},
'settings.dropdownItems': {
type: [Object],
- optional: true
+ optional: true,
},
'settings.dropdownItems.$': {
type: new SimpleSchema({
@@ -26,11 +26,11 @@ CustomFields.attachSchema(new SimpleSchema({
name: {
type: String,
},
- })
+ }),
},
showOnCard: {
type: Boolean,
- }
+ },
}));
CustomFields.allow({
@@ -76,16 +76,16 @@ if (Meteor.isServer) {
//CUSTOM FIELD REST API
if (Meteor.isServer) {
- JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields', function (req, res, next) {
+ JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields', function (req, res) {
Authentication.checkUserId( req.userId);
const paramBoardId = req.params.boardId;
JsonRoutes.sendResult(res, {
code: 200,
- data: CustomFields.find({ boardId: paramBoardId })
+ data: CustomFields.find({ boardId: paramBoardId }),
});
});
- JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res, next) {
+ JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res) {
Authentication.checkUserId( req.userId);
const paramBoardId = req.params.boardId;
const paramCustomFieldId = req.params.customFieldId;
@@ -95,7 +95,7 @@ if (Meteor.isServer) {
});
});
- JsonRoutes.add('POST', '/api/boards/:boardId/custom-fields', function (req, res, next) {
+ JsonRoutes.add('POST', '/api/boards/:boardId/custom-fields', function (req, res) {
Authentication.checkUserId( req.userId);
const paramBoardId = req.params.boardId;
const id = CustomFields.direct.insert({
@@ -117,7 +117,7 @@ if (Meteor.isServer) {
});
});
- JsonRoutes.add('DELETE', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res, next) {
+ JsonRoutes.add('DELETE', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res) {
Authentication.checkUserId( req.userId);
const paramBoardId = req.params.boardId;
const id = req.params.customFieldId;