summaryrefslogtreecommitdiffstats
path: root/client/components
diff options
context:
space:
mode:
authorIgnatzHome <ignatz@maschath.de>2018-06-14 19:42:09 +0200
committerIgnatzHome <ignatz@maschath.de>2018-06-14 19:42:09 +0200
commita433f7d9fe310e1aa5f5c831b2bfacb5b86c941e (patch)
tree6e30c7ebc0106518ec5ea76bcb57d294cc9f48f1 /client/components
parent991e74bfc287d840951b7c707b7ff2a2f26e5001 (diff)
parentfcf262cc9807c1e87e638ce6b0c6151ae2114f60 (diff)
downloadwekan-a433f7d9fe310e1aa5f5c831b2bfacb5b86c941e.tar.gz
wekan-a433f7d9fe310e1aa5f5c831b2bfacb5b86c941e.tar.bz2
wekan-a433f7d9fe310e1aa5f5c831b2bfacb5b86c941e.zip
Merge branch 'feature-custom-fields' of https://github.com/feuerball11/wekan into feature-custom-fields
Diffstat (limited to 'client/components')
-rw-r--r--client/components/boards/boardArchive.jade16
-rw-r--r--client/components/boards/boardArchive.js12
-rw-r--r--client/components/boards/boardBody.js2
-rw-r--r--client/components/boards/boardHeader.js6
-rw-r--r--client/components/cards/cardDate.js14
-rw-r--r--client/components/cards/cardDetails.jade48
-rw-r--r--client/components/cards/cardDetails.js42
-rw-r--r--client/components/cards/cardDetails.styl3
-rw-r--r--client/components/cards/labels.styl54
-rw-r--r--client/components/cards/minicard.jade23
-rw-r--r--client/components/cards/minicard.styl7
-rw-r--r--client/components/sidebar/sidebarCustomFields.jade4
-rw-r--r--client/components/sidebar/sidebarFilters.jade19
-rw-r--r--client/components/sidebar/sidebarFilters.js10
14 files changed, 242 insertions, 18 deletions
diff --git a/client/components/boards/boardArchive.jade b/client/components/boards/boardArchive.jade
index 6576f742..5d291f00 100644
--- a/client/components/boards/boardArchive.jade
+++ b/client/components/boards/boardArchive.jade
@@ -6,9 +6,17 @@ template(name="archivedBoards")
ul.archived-lists
each archivedBoards
li.archived-lists-item
- button.js-restore-board
- i.fa.fa-undo
- | {{_ 'restore-board'}}
- = title
+ div.board-header-btns
+ button.board-header-btn.js-delete-board
+ i.fa.fa-trash-o
+ | {{_ 'delete-board'}}
+ button.board-header-btn.js-restore-board
+ i.fa.fa-undo
+ | {{_ 'restore-board'}}
+ = title
else
li.no-items-message {{_ 'no-archived-boards'}}
+
+template(name="boardDeletePopup")
+ p {{_ 'delete-board-confirm-popup'}}
+ button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
diff --git a/client/components/boards/boardArchive.js b/client/components/boards/boardArchive.js
index acb53149..dbebdd70 100644
--- a/client/components/boards/boardArchive.js
+++ b/client/components/boards/boardArchive.js
@@ -29,6 +29,18 @@ BlazeComponent.extendComponent({
board.restore();
Utils.goBoardId(board._id);
},
+ 'click .js-delete-board': Popup.afterConfirm('boardDelete', function() {
+ Popup.close();
+ const isSandstorm = Meteor.settings && Meteor.settings.public &&
+ Meteor.settings.public.sandstorm;
+ if (isSandstorm && Session.get('currentBoard')) {
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ Boards.remove(currentBoard._id);
+ }
+ const board = this.currentData();
+ Boards.remove(board._id);
+ FlowRouter.go('home');
+ }),
}];
},
}).register('archivedBoards');
diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js
index 456bf9b3..dfe7b8d2 100644
--- a/client/components/boards/boardBody.js
+++ b/client/components/boards/boardBody.js
@@ -88,11 +88,13 @@ BlazeComponent.extendComponent({
isViewSwimlanes() {
const currentUser = Meteor.user();
+ if (!currentUser) return false;
return (currentUser.profile.boardView === 'board-view-swimlanes');
},
isViewLists() {
const currentUser = Meteor.user();
+ if (!currentUser) return true;
return (currentUser.profile.boardView === 'board-view-lists');
},
diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js
index e0b19246..b2640474 100644
--- a/client/components/boards/boardHeader.js
+++ b/client/components/boards/boardHeader.js
@@ -17,6 +17,12 @@ Template.boardMenuPopup.events({
// confirm that the board was successfully archived.
FlowRouter.go('home');
}),
+ 'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() {
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ Popup.close();
+ Boards.remove(currentBoard._id);
+ FlowRouter.go('home');
+ }),
'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'),
'click .js-import-board': Popup.open('chooseBoardSource'),
});
diff --git a/client/components/cards/cardDate.js b/client/components/cards/cardDate.js
index f33e8c19..e95c3a23 100644
--- a/client/components/cards/cardDate.js
+++ b/client/components/cards/cardDate.js
@@ -93,7 +93,7 @@ Template.dateBadge.helpers({
});
// editCardReceivedDatePopup
-(class extends EditCardDate {
+(class extends DatePicker {
onCreated() {
super.onCreated();
this.data().receivedAt && this.date.set(moment(this.data().receivedAt));
@@ -156,7 +156,7 @@ Template.dateBadge.helpers({
}).register('editCardDueDatePopup');
// editCardEndDatePopup
-(class extends EditCardDate {
+(class extends DatePicker {
onCreated() {
super.onCreated();
this.data().endAt && this.date.set(moment(this.data().endAt));
@@ -279,11 +279,14 @@ class CardDueDate extends CardDate {
classes() {
let classes = 'due-date' + ' ';
- if (this.now.get().diff(this.date.get(), 'days') >= 2)
+ if ((this.now.get().diff(this.date.get(), 'days') >= 2) &&
+ (this.date.get().isBefore(this.data().endAt)))
classes += 'long-overdue';
- else if (this.now.get().diff(this.date.get(), 'minute') >= 0)
+ else if ((this.now.get().diff(this.date.get(), 'minute') >= 0) &&
+ (this.date.get().isBefore(this.data().endAt)))
classes += 'due';
- else if (this.now.get().diff(this.date.get(), 'days') >= -1)
+ else if ((this.now.get().diff(this.date.get(), 'days') >= -1) &&
+ (this.date.get().isBefore(this.data().endAt)))
classes += 'almost-due';
return classes;
}
@@ -355,4 +358,3 @@ CardEndDate.register('cardEndDate');
return this.date.get().format('l');
}
}).register('minicardEndDate');
-
diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade
index 55ee8d32..aa4829a9 100644
--- a/client/components/cards/cardDetails.jade
+++ b/client/components/cards/cardDetails.jade
@@ -108,6 +108,39 @@ template(name="cardDetails")
+viewer
= description
+ .card-details-items
+ .card-details-item.card-details-item-name
+ h3.card-details-item-title {{_ 'requested-by'}}
+ if canModifyCard
+ +inlinedForm(classNames="js-card-details-requester")
+ +editCardRequesterForm
+ else
+ a.js-open-inlined-form
+ if requestedBy
+ +viewer
+ = requestedBy
+ else
+ | {{_ 'add'}}
+ else if requestedBy
+ +viewer
+ = requestedBy
+
+ .card-details-item.card-details-item-name
+ h3.card-details-item-title {{_ 'assigned-by'}}
+ if canModifyCard
+ +inlinedForm(classNames="js-card-details-assigner")
+ +editCardAssignerForm
+ else
+ a.js-open-inlined-form
+ if assignedBy
+ +viewer
+ = assignedBy
+ else
+ | {{_ 'add'}}
+ else if requestedBy
+ +viewer
+ = assignedBy
+
hr
+checklists(cardId = _id)
@@ -141,6 +174,18 @@ template(name="editCardTitleForm")
button.primary.confirm.js-submit-edit-card-title-form(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
+template(name="editCardRequesterForm")
+ input.js-edit-card-requester(type='text' autofocus value=requestedBy)
+ .edit-controls.clearfix
+ button.primary.confirm.js-submit-edit-card-requester-form(type="submit") {{_ 'save'}}
+ a.fa.fa-times-thin.js-close-inlined-form
+
+template(name="editCardAssignerForm")
+ input.js-edit-card-assigner(type='text' autofocus value=assignedBy)
+ .edit-controls.clearfix
+ button.primary.confirm.js-submit-edit-card-assigner-form(type="submit") {{_ 'save'}}
+ a.fa.fa-times-thin.js-close-inlined-form
+
template(name="cardDetailsActionsPopup")
ul.pop-over-list
li: a.js-toggle-watch-card {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}}
@@ -150,8 +195,8 @@ template(name="cardDetailsActionsPopup")
li: a.js-members {{_ 'card-edit-members'}}
li: a.js-labels {{_ 'card-edit-labels'}}
li: a.js-attachments {{_ 'card-edit-attachments'}}
- li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}}
li: a.js-custom-fields {{_ 'card-edit-custom-fields'}}
+ li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}}
li: a.js-start-date {{_ 'editCardStartDatePopup-title'}}
li: a.js-due-date {{_ 'editCardDueDatePopup-title'}}
li: a.js-end-date {{_ 'editCardEndDatePopup-title'}}
@@ -178,7 +223,6 @@ template(name="copyCardPopup")
= title
+boardsAndLists
-
template(name="copyChecklistToManyCardsPopup")
label(for='copy-checklist-cards-title') {{_ 'copyChecklistToManyCardsPopup-instructions'}}:
textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js
index a2bf2d02..1a8a8bef 100644
--- a/client/components/cards/cardDetails.js
+++ b/client/components/cards/cardDetails.js
@@ -150,6 +150,20 @@ BlazeComponent.extendComponent({
this.data().setTitle(title);
}
},
+ 'submit .js-card-details-assigner'(evt) {
+ evt.preventDefault();
+ const assigner = this.currentComponent().getValue().trim();
+ if (assigner) {
+ this.data().setAssignedBy(assigner);
+ }
+ },
+ 'submit .js-card-details-requester'(evt) {
+ evt.preventDefault();
+ const requester = this.currentComponent().getValue().trim();
+ if (requester) {
+ this.data().setRequestedBy(requester);
+ }
+ },
'click .js-member': Popup.open('cardMember'),
'click .js-add-members': Popup.open('cardMembers'),
'click .js-add-labels': Popup.open('cardLabels'),
@@ -221,8 +235,8 @@ Template.cardDetailsActionsPopup.events({
'click .js-members': Popup.open('cardMembers'),
'click .js-labels': Popup.open('cardLabels'),
'click .js-attachments': Popup.open('cardAttachments'),
- 'click .js-received-date': Popup.open('editCardReceivedDate'),
'click .js-custom-fields': Popup.open('cardCustomFields'),
+ 'click .js-received-date': Popup.open('editCardReceivedDate'),
'click .js-start-date': Popup.open('editCardStartDate'),
'click .js-due-date': Popup.open('editCardDueDate'),
'click .js-end-date': Popup.open('editCardEndDate'),
@@ -269,6 +283,32 @@ Template.editCardTitleForm.events({
},
});
+Template.editCardRequesterForm.onRendered(function() {
+ autosize(this.$('.js-edit-card-requester'));
+});
+
+Template.editCardRequesterForm.events({
+ 'keydown .js-edit-card-requester'(evt) {
+ // If enter key was pressed, submit the data
+ if (evt.keyCode === 13) {
+ $('.js-submit-edit-card-requester-form').click();
+ }
+ },
+});
+
+Template.editCardAssignerForm.onRendered(function() {
+ autosize(this.$('.js-edit-card-assigner'));
+});
+
+Template.editCardAssignerForm.events({
+ 'keydown .js-edit-card-assigner'(evt) {
+ // If enter key was pressed, submit the data
+ if (evt.keyCode === 13) {
+ $('.js-submit-edit-card-assigner-form').click();
+ }
+ },
+});
+
Template.moveCardPopup.events({
'click .js-done' () {
// XXX We should *not* get the currentCard from the global state, but
diff --git a/client/components/cards/cardDetails.styl b/client/components/cards/cardDetails.styl
index 7dbe8732..11660593 100644
--- a/client/components/cards/cardDetails.styl
+++ b/client/components/cards/cardDetails.styl
@@ -82,7 +82,8 @@
&.card-details-item-start,
&.card-details-item-due,
&.card-details-item-end,
- &.card-details-item-customfield
+ &.card-details-item-customfield,
+ &.card-details-item-name
max-width: 50%
flex-grow: 1
diff --git a/client/components/cards/labels.styl b/client/components/cards/labels.styl
index 361a17ae..3b481d93 100644
--- a/client/components/cards/labels.styl
+++ b/client/components/cards/labels.styl
@@ -3,7 +3,7 @@
// XXX Use .board-widget-labels as a flexbox container
.card-label
border-radius: 4px
- color: white
+ color: white //Default white text, in select cases, changed to black to improve contrast between label colour and text
display: inline-block
font-weight: 700
font-size: 13px
@@ -48,9 +48,11 @@
.card-label-yellow
background-color: #fad900
+ color: #000000 //Black text for better visibility
.card-label-orange
background-color: #ff9f19
+ color: #000000 //Black text for better visibility
.card-label-red
background-color: #eb4646
@@ -63,6 +65,7 @@
.card-label-pink
background-color: #ff78cb
+ color: #000000 //Black text for better visibility
.card-label-sky
background-color: #00c2e0
@@ -72,6 +75,55 @@
.card-label-lime
background-color: #51e898
+ color: #000000 //Black text for better visibility
+
+.card-label-silver
+ background-color: #c0c0c0
+ color: #000000 //Black text for better visibility
+
+.card-label-peachpuff
+ background-color: #ffdab9
+ color: #000000 //Black text for better visibility
+
+.card-label-crimson
+ background-color: #dc143c
+
+.card-label-plum
+ background-color: #dda0dd
+ color: #000000 //Black text for better visibility
+
+.card-label-darkgreen
+ background-color: #006400
+
+.card-label-slateblue
+ background-color: #6a5acd
+
+.card-label-magenta
+ background-color: #ff00ff
+
+.card-label-gold
+ background-color: #ffd700
+ color: #000000 //Black text for better visibility
+
+.card-label-navy
+ background-color: #000080
+
+.card-label-gray
+ background-color: #808080
+
+.card-label-saddlebrown
+ background-color: #8b4513
+
+.card-label-paleturquoise
+ background-color: #afeeee
+ color: #000000 //Black text for better visibility
+
+.card-label-mistyrose
+ background-color: #ffe4e1
+ color: #000000 //Black text for better visibility
+
+.card-label-indigo
+ background-color: #4b0082
.edit-label,
.create-label
diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade
index 9fa4dd57..c912ea70 100644
--- a/client/components/cards/minicard.jade
+++ b/client/components/cards/minicard.jade
@@ -10,20 +10,41 @@ template(name="minicard")
+viewer
= title
.dates
+ if receivedAt
+ unless startAt
+ unless dueAt
+ unless endAt
+ .date
+ +miniCardReceivedDate
if startAt
.date
+minicardStartDate
if dueAt
+ unless endAt
+ .date
+ +minicardDueDate
+ if endAt
.date
- +minicardDueDate
+ +minicardEndDate
if spentTime
.date
+cardSpentTime
+ .minicard-custom-fields
+ each customFieldsWD
+ if definition.showOnCard
+ .minicard-custom-field
+ .minicard-custom-field-item
+ = definition.name
+ .minicard-custom-field-item
+ +viewer
+ = trueValue
+
if members
.minicard-members.js-minicard-members
each members
+userAvatar(userId=this)
+
.badges
if comments.count
.badge(title="{{_ 'card-comments-title' comments.count }}")
diff --git a/client/components/cards/minicard.styl b/client/components/cards/minicard.styl
index d59f1f63..38f829d0 100644
--- a/client/components/cards/minicard.styl
+++ b/client/components/cards/minicard.styl
@@ -77,6 +77,13 @@
height: @width
border-radius: 2px
margin-left: 3px
+ .minicard-custom-fields
+ display:block;
+ .minicard-custom-field
+ display:flex;
+ .minicard-custom-field-item
+ max-width:50%;
+ flex-grow:1;
.minicard-title
p:last-child
margin-bottom: 0
diff --git a/client/components/sidebar/sidebarCustomFields.jade b/client/components/sidebar/sidebarCustomFields.jade
index def083e9..fd31e5ac 100644
--- a/client/components/sidebar/sidebarCustomFields.jade
+++ b/client/components/sidebar/sidebarCustomFields.jade
@@ -37,7 +37,7 @@ template(name="createCustomFieldPopup")
each dropdownItems.get
input.js-dropdown-item(type="text" value=name placeholder="")
input.js-dropdown-item.last(type="text" value="" placeholder="{{_ 'custom-field-dropdown-options-placeholder'}}")
- a.flex.js-field-show-on-card
+ a.flex.js-field-show-on-card(class="{{#if showOnCard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if showOnCard}}is-checked{{/if}}")
span {{_ 'show-field-on-card'}}
@@ -49,4 +49,4 @@ template(name="createCustomFieldPopup")
template(name="deleteCustomFieldPopup")
p {{_ "custom-field-delete-pop"}}
- button.js-confirm.negate.full(type="submit") {{_ 'delete'}} \ No newline at end of file
+ button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade
index 273df8c2..514870b8 100644
--- a/client/components/sidebar/sidebarFilters.jade
+++ b/client/components/sidebar/sidebarFilters.jade
@@ -40,6 +40,25 @@ template(name="filterSidebar")
| (<span class="username">{{ username }}</span>)
if Filter.members.isSelected _id
i.fa.fa-check
+ hr
+ ul.sidebar-list
+ li(class="{{#if Filter.customFields.isSelected undefined}}active{{/if}}")
+ a.name.js-toggle-custom-fields-filter
+ span.sidebar-list-item-description
+ | {{_ 'filter-no-custom-fields'}}
+ if Filter.customFields.isSelected undefined
+ i.fa.fa-check
+ each currentBoard.customFields
+ li(class="{{#if Filter.customFields.isSelected _id}}active{{/if}}")
+ a.name.js-toggle-custom-fields-filter
+ span.sidebar-list-item-description
+ {{ name }}
+ if Filter.customFields.isSelected _id
+ i.fa.fa-check
+ hr
+ span {{_ 'advanced-filter-label'}}
+ input.js-field-advanced-filter(type="text")
+ span {{_ 'advanced-filter-description'}}
if Filter.isActive
hr
a.sidebar-btn.js-clear-all
diff --git a/client/components/sidebar/sidebarFilters.js b/client/components/sidebar/sidebarFilters.js
index f02d3a4a..fd8229e4 100644
--- a/client/components/sidebar/sidebarFilters.js
+++ b/client/components/sidebar/sidebarFilters.js
@@ -11,6 +11,16 @@ BlazeComponent.extendComponent({
Filter.members.toggle(this.currentData()._id);
Filter.resetExceptions();
},
+ 'click .js-toggle-custom-fields-filter'(evt) {
+ evt.preventDefault();
+ Filter.customFields.toggle(this.currentData()._id);
+ Filter.resetExceptions();
+ },
+ 'change .js-field-advanced-filter'(evt) {
+ evt.preventDefault();
+ Filter.advanced.set(this.find('.js-field-advanced-filter').value.trim());
+ Filter.resetExceptions();
+ },
'click .js-clear-all'(evt) {
evt.preventDefault();
Filter.reset();