|
|
|
@ -1,7 +1,7 @@ |
|
|
|
|
template(name="cardDetails") |
|
|
|
|
section.card-details.js-card-details.js-perfect-scrollbar: .card-details-canvas |
|
|
|
|
.card-details-header(class='{{#if colorClass}}card-details-{{colorClass}}{{/if}}') |
|
|
|
|
+inlinedForm(classNames="js-card-details-title") |
|
|
|
|
+inlinedForm(classNames="{{#if canModifyCardWorker}}js-card-details-title{{/if}}") |
|
|
|
|
+editCardTitleForm |
|
|
|
|
else |
|
|
|
|
unless isMiniScreen |
|
|
|
@ -13,11 +13,11 @@ template(name="cardDetails") |
|
|
|
|
if currentUser.isBoardMember |
|
|
|
|
a.fa.fa-navicon.card-details-menu-mobile-web.js-open-card-details-menu |
|
|
|
|
h2.card-details-title.js-card-title( |
|
|
|
|
class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}") |
|
|
|
|
class="{{#if canModifyCardWorker}}js-open-inlined-form is-editable{{/if}}") |
|
|
|
|
+viewer |
|
|
|
|
= getTitle |
|
|
|
|
if isWatching |
|
|
|
|
i.fa.fa-eye.card-details-watch |
|
|
|
|
if isWatching |
|
|
|
|
i.card-details-watch.fa.fa-eye |
|
|
|
|
.card-details-path |
|
|
|
|
each parentList |
|
|
|
|
| > |
|
|
|
@ -37,49 +37,66 @@ template(name="cardDetails") |
|
|
|
|
|
|
|
|
|
.card-details-items |
|
|
|
|
.card-details-item.card-details-item-received |
|
|
|
|
h3.card-details-item-title {{_ 'card-received'}} |
|
|
|
|
h3 |
|
|
|
|
i.fa.fa-sign-out |
|
|
|
|
card-details-item-title {{_ 'card-received'}} |
|
|
|
|
if getReceived |
|
|
|
|
+cardReceivedDate |
|
|
|
|
else |
|
|
|
|
if canModifyCard |
|
|
|
|
a.js-received-date {{_ 'add'}} |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
a.js-received-date {{_ 'add'}} |
|
|
|
|
|
|
|
|
|
.card-details-item.card-details-item-start |
|
|
|
|
h3.card-details-item-title {{_ 'card-start'}} |
|
|
|
|
h3 |
|
|
|
|
i.fa.fa-hourglass-start |
|
|
|
|
card-details-item-title {{_ 'card-start'}} |
|
|
|
|
if getStart |
|
|
|
|
+cardStartDate |
|
|
|
|
else |
|
|
|
|
if canModifyCard |
|
|
|
|
a.js-start-date {{_ 'add'}} |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
a.js-start-date {{_ 'add'}} |
|
|
|
|
|
|
|
|
|
.card-details-item.card-details-item-due |
|
|
|
|
h3.card-details-item-title {{_ 'card-due'}} |
|
|
|
|
h3 |
|
|
|
|
i.fa.fa-sign-in |
|
|
|
|
card-details-item-title {{_ 'card-due'}} |
|
|
|
|
if getDue |
|
|
|
|
+cardDueDate |
|
|
|
|
else |
|
|
|
|
if canModifyCard |
|
|
|
|
a.js-due-date {{_ 'add'}} |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
a.js-due-date {{_ 'add'}} |
|
|
|
|
|
|
|
|
|
.card-details-item.card-details-item-end |
|
|
|
|
h3.card-details-item-title {{_ 'card-end'}} |
|
|
|
|
h3 |
|
|
|
|
i.fa.fa-hourglass-end |
|
|
|
|
card-details-item-title {{_ 'card-end'}} |
|
|
|
|
if getEnd |
|
|
|
|
+cardEndDate |
|
|
|
|
else |
|
|
|
|
if canModifyCard |
|
|
|
|
a.js-end-date {{_ 'add'}} |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
a.js-end-date {{_ 'add'}} |
|
|
|
|
|
|
|
|
|
.card-details-items |
|
|
|
|
.card-details-item.card-details-item-members |
|
|
|
|
h3.card-details-item-title {{_ 'members'}} |
|
|
|
|
h3 |
|
|
|
|
i.fa.fa-users |
|
|
|
|
card-details-item-title {{_ 'members'}} |
|
|
|
|
each getMembers |
|
|
|
|
+userAvatar(userId=this cardId=../_id) |
|
|
|
|
| {{! XXX Hack to hide syntaxic coloration /// }} |
|
|
|
|
if canModifyCard |
|
|
|
|
a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}") |
|
|
|
|
i.fa.fa-plus |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}") |
|
|
|
|
i.fa.fa-plus |
|
|
|
|
|
|
|
|
|
.card-details-item.card-details-item-assignees |
|
|
|
|
h3.card-details-item-title {{_ 'assignee'}} |
|
|
|
|
h3 |
|
|
|
|
i.fa.fa-user |
|
|
|
|
card-details-item-title {{_ 'assignee'}} |
|
|
|
|
each getAssignees |
|
|
|
|
+userAvatarAssignee(userId=this cardId=../_id) |
|
|
|
|
| {{! XXX Hack to hide syntaxic coloration /// }} |
|
|
|
@ -89,15 +106,18 @@ template(name="cardDetails") |
|
|
|
|
i.fa.fa-plus |
|
|
|
|
|
|
|
|
|
.card-details-item.card-details-item-labels |
|
|
|
|
h3.card-details-item-title {{_ 'labels'}} |
|
|
|
|
h3 |
|
|
|
|
i.fa.fa-tags |
|
|
|
|
card-details-item-title {{_ 'labels'}} |
|
|
|
|
a(class="{{#if canModifyCard}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}") |
|
|
|
|
each labels |
|
|
|
|
span.card-label(class="card-label-{{color}}" title=name) |
|
|
|
|
+viewer |
|
|
|
|
= name |
|
|
|
|
if canModifyCard |
|
|
|
|
a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}") |
|
|
|
|
i.fa.fa-plus |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}") |
|
|
|
|
i.fa.fa-plus |
|
|
|
|
|
|
|
|
|
.card-details-items |
|
|
|
|
each customFieldsWD |
|
|
|
@ -118,26 +138,29 @@ template(name="cardDetails") |
|
|
|
|
|
|
|
|
|
//- XXX We should use "editable" to avoid repetiting ourselves |
|
|
|
|
if canModifyCard |
|
|
|
|
h3.card-details-item-title {{_ 'description'}} |
|
|
|
|
+inlinedCardDescription(classNames="card-description js-card-description") |
|
|
|
|
+editor(autofocus=true) |
|
|
|
|
| {{getUnsavedValue 'cardDescription' _id getDescription}} |
|
|
|
|
.edit-controls.clearfix |
|
|
|
|
button.primary(type="submit") {{_ 'save'}} |
|
|
|
|
a.fa.fa-times-thin.js-close-inlined-form |
|
|
|
|
else |
|
|
|
|
a.js-open-inlined-form |
|
|
|
|
if getDescription |
|
|
|
|
+viewer |
|
|
|
|
= getDescription |
|
|
|
|
else |
|
|
|
|
| {{_ 'edit'}} |
|
|
|
|
if (hasUnsavedValue 'cardDescription' _id) |
|
|
|
|
p.quiet |
|
|
|
|
| {{_ 'unsaved-description'}} |
|
|
|
|
a.js-open-inlined-form {{_ 'view-it'}} |
|
|
|
|
= ' - ' |
|
|
|
|
a.js-close-inlined-form {{_ 'discard'}} |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
h3 |
|
|
|
|
i.fa.fa-align-left |
|
|
|
|
card-details-item-title {{_ 'description'}} |
|
|
|
|
+inlinedCardDescription(classNames="card-description js-card-description") |
|
|
|
|
+editor(autofocus=true) |
|
|
|
|
| {{getUnsavedValue 'cardDescription' _id getDescription}} |
|
|
|
|
.edit-controls.clearfix |
|
|
|
|
button.primary(type="submit") {{_ 'save'}} |
|
|
|
|
a.fa.fa-times-thin.js-close-inlined-form |
|
|
|
|
else |
|
|
|
|
a.js-open-inlined-form |
|
|
|
|
if getDescription |
|
|
|
|
+viewer |
|
|
|
|
= getDescription |
|
|
|
|
else |
|
|
|
|
| {{_ 'edit'}} |
|
|
|
|
if (hasUnsavedValue 'cardDescription' _id) |
|
|
|
|
p.quiet |
|
|
|
|
| {{_ 'unsaved-description'}} |
|
|
|
|
a.js-open-inlined-form {{_ 'view-it'}} |
|
|
|
|
= ' - ' |
|
|
|
|
a.js-close-inlined-form {{_ 'discard'}} |
|
|
|
|
else if getDescription |
|
|
|
|
h3.card-details-item-title {{_ 'description'}} |
|
|
|
|
+viewer |
|
|
|
@ -145,33 +168,39 @@ template(name="cardDetails") |
|
|
|
|
|
|
|
|
|
.card-details-items |
|
|
|
|
.card-details-item.card-details-item-name |
|
|
|
|
h3.card-details-item-title {{_ 'requested-by'}} |
|
|
|
|
h3 |
|
|
|
|
i.fa.fa-shopping-cart |
|
|
|
|
card-details-item-title {{_ 'requested-by'}} |
|
|
|
|
if canModifyCard |
|
|
|
|
+inlinedForm(classNames="js-card-details-requester") |
|
|
|
|
+editCardRequesterForm |
|
|
|
|
else |
|
|
|
|
a.js-open-inlined-form |
|
|
|
|
if getRequestedBy |
|
|
|
|
+viewer |
|
|
|
|
= getRequestedBy |
|
|
|
|
else |
|
|
|
|
| {{_ 'add'}} |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
+inlinedForm(classNames="js-card-details-requester") |
|
|
|
|
+editCardRequesterForm |
|
|
|
|
else |
|
|
|
|
a.js-open-inlined-form |
|
|
|
|
if getRequestedBy |
|
|
|
|
+viewer |
|
|
|
|
= getRequestedBy |
|
|
|
|
else |
|
|
|
|
| {{_ 'add'}} |
|
|
|
|
else if getRequestedBy |
|
|
|
|
+viewer |
|
|
|
|
= getRequestedBy |
|
|
|
|
|
|
|
|
|
.card-details-item.card-details-item-name |
|
|
|
|
h3.card-details-item-title {{_ 'assigned-by'}} |
|
|
|
|
h3 |
|
|
|
|
i.fa.fa-user-plus |
|
|
|
|
card-details-item-title {{_ 'assigned-by'}} |
|
|
|
|
if canModifyCard |
|
|
|
|
+inlinedForm(classNames="js-card-details-assigner") |
|
|
|
|
+editCardAssignerForm |
|
|
|
|
else |
|
|
|
|
a.js-open-inlined-form |
|
|
|
|
if getAssignedBy |
|
|
|
|
+viewer |
|
|
|
|
= getAssignedBy |
|
|
|
|
else |
|
|
|
|
| {{_ 'add'}} |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
+inlinedForm(classNames="js-card-details-assigner") |
|
|
|
|
+editCardAssignerForm |
|
|
|
|
else |
|
|
|
|
a.js-open-inlined-form |
|
|
|
|
if getAssignedBy |
|
|
|
|
+viewer |
|
|
|
|
= getAssignedBy |
|
|
|
|
else |
|
|
|
|
| {{_ 'add'}} |
|
|
|
|
else if getRequestedBy |
|
|
|
|
+viewer |
|
|
|
|
= getAssignedBy |
|
|
|
@ -193,7 +222,9 @@ template(name="cardDetails") |
|
|
|
|
hr |
|
|
|
|
unless currentUser.isNoComments |
|
|
|
|
.activity-title |
|
|
|
|
h3 {{ _ 'activity'}} |
|
|
|
|
h3 |
|
|
|
|
i.fa.fa-history |
|
|
|
|
| {{ _ 'activity'}} |
|
|
|
|
if currentUser.isBoardMember |
|
|
|
|
.material-toggle-switch |
|
|
|
|
span.toggle-switch-title {{_ 'hide-system-messages'}} |
|
|
|
@ -235,32 +266,79 @@ template(name="editCardAssignerForm") |
|
|
|
|
|
|
|
|
|
template(name="cardDetailsActionsPopup") |
|
|
|
|
ul.pop-over-list |
|
|
|
|
li: a.js-toggle-watch-card {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}} |
|
|
|
|
li |
|
|
|
|
a.js-toggle-watch-card |
|
|
|
|
if isWatching |
|
|
|
|
i.fa.fa-eye |
|
|
|
|
| {{_ 'unwatch'}} |
|
|
|
|
else |
|
|
|
|
i.fa.fa-eye-slash |
|
|
|
|
| {{_ 'watch'}} |
|
|
|
|
if canModifyCard |
|
|
|
|
hr |
|
|
|
|
ul.pop-over-list |
|
|
|
|
//li: a.js-members {{_ 'card-edit-members'}} |
|
|
|
|
//li: a.js-labels {{_ 'card-edit-labels'}} |
|
|
|
|
//li: a.js-attachments {{_ 'card-edit-attachments'}} |
|
|
|
|
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'}} |
|
|
|
|
li: a.js-spent-time {{_ 'editCardSpentTimePopup-title'}} |
|
|
|
|
li: a.js-set-card-color {{_ 'setCardColorPopup-title'}} |
|
|
|
|
hr |
|
|
|
|
ul.pop-over-list |
|
|
|
|
li: a.js-move-card-to-top {{_ 'moveCardToTop-title'}} |
|
|
|
|
li: a.js-move-card-to-bottom {{_ 'moveCardToBottom-title'}} |
|
|
|
|
hr |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
hr |
|
|
|
|
ul.pop-over-list |
|
|
|
|
//li: a.js-members {{_ 'card-edit-members'}} |
|
|
|
|
//li: a.js-labels {{_ 'card-edit-labels'}} |
|
|
|
|
//li: a.js-attachments {{_ 'card-edit-attachments'}} |
|
|
|
|
li |
|
|
|
|
a.js-custom-fields |
|
|
|
|
i.fa.fa-list-alt |
|
|
|
|
| {{_ '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'}} |
|
|
|
|
li |
|
|
|
|
a.js-spent-time |
|
|
|
|
i.fa.fa-clock-o |
|
|
|
|
| {{_ 'editCardSpentTimePopup-title'}} |
|
|
|
|
li |
|
|
|
|
a.js-set-card-color |
|
|
|
|
i.fa.fa-paint-brush |
|
|
|
|
| {{_ 'setCardColorPopup-title'}} |
|
|
|
|
hr |
|
|
|
|
ul.pop-over-list |
|
|
|
|
li: a.js-move-card {{_ 'moveCardPopup-title'}} |
|
|
|
|
li: a.js-copy-card {{_ 'copyCardPopup-title'}} |
|
|
|
|
li: a.js-copy-checklist-cards {{_ 'copyChecklistToManyCardsPopup-title'}} |
|
|
|
|
li |
|
|
|
|
a.js-move-card-to-top |
|
|
|
|
i.fa.fa-arrow-up |
|
|
|
|
| {{_ 'moveCardToTop-title'}} |
|
|
|
|
li |
|
|
|
|
a.js-move-card-to-bottom |
|
|
|
|
i.fa.fa-arrow-down |
|
|
|
|
| {{_ 'moveCardToBottom-title'}} |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
hr |
|
|
|
|
ul.pop-over-list |
|
|
|
|
li |
|
|
|
|
a.js-move-card |
|
|
|
|
i.fa.fa-arrow-right |
|
|
|
|
| {{_ 'moveCardPopup-title'}} |
|
|
|
|
li |
|
|
|
|
a.js-copy-card |
|
|
|
|
i.fa.fa-copy |
|
|
|
|
| {{_ 'copyCardPopup-title'}} |
|
|
|
|
hr |
|
|
|
|
ul.pop-over-list |
|
|
|
|
li |
|
|
|
|
a.js-copy-checklist-cards |
|
|
|
|
i.fa.fa-list |
|
|
|
|
i.fa.fa-copy |
|
|
|
|
| {{_ 'copyChecklistToManyCardsPopup-title'}} |
|
|
|
|
unless archived |
|
|
|
|
li: a.js-archive {{_ 'archive-card'}} |
|
|
|
|
li: a.js-more {{_ 'cardMorePopup-title'}} |
|
|
|
|
hr |
|
|
|
|
ul.pop-over-list |
|
|
|
|
li |
|
|
|
|
a.js-archive |
|
|
|
|
i.fa.fa-arrow-right |
|
|
|
|
i.fa.fa-archive |
|
|
|
|
| {{_ 'archive-card'}} |
|
|
|
|
hr |
|
|
|
|
ul.pop-over-list |
|
|
|
|
li |
|
|
|
|
a.js-more |
|
|
|
|
i.fa.fa-link |
|
|
|
|
| {{_ 'cardMorePopup-title'}} |
|
|
|
|
|
|
|
|
|
template(name="moveCardPopup") |
|
|
|
|
+boardsAndLists |
|
|
|
@ -312,16 +390,27 @@ template(name="cardMembersPopup") |
|
|
|
|
i.fa.fa-check |
|
|
|
|
|
|
|
|
|
template(name="cardAssigneesPopup") |
|
|
|
|
ul.pop-over-list.js-card-assignee-list |
|
|
|
|
each board.activeMembers |
|
|
|
|
li.item(class="{{#if isCardAssignee}}active{{/if}}") |
|
|
|
|
a.name.js-select-assignee(href="#") |
|
|
|
|
+userAvatar(userId=user._id) |
|
|
|
|
span.full-name |
|
|
|
|
= user.profile.fullname |
|
|
|
|
| (<span class="username">{{ user.username }}</span>) |
|
|
|
|
if isCardAssignee |
|
|
|
|
i.fa.fa-check |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
ul.pop-over-list.js-card-assignee-list |
|
|
|
|
each board.activeMembers |
|
|
|
|
li.item(class="{{#if isCardAssignee}}active{{/if}}") |
|
|
|
|
a.name.js-select-assignee(href="#") |
|
|
|
|
+userAvatar(userId=user._id) |
|
|
|
|
span.full-name |
|
|
|
|
= user.profile.fullname |
|
|
|
|
| (<span class="username">{{ user.username }}</span>) |
|
|
|
|
if isCardAssignee |
|
|
|
|
i.fa.fa-check |
|
|
|
|
if currentUser.isWorker |
|
|
|
|
ul.pop-over-list.js-card-assignee-list |
|
|
|
|
li.item(class="{{#if currentUser.isCardAssignee}}active{{/if}}") |
|
|
|
|
a.name.js-select-assigneeWorker(href="#") |
|
|
|
|
+userAvatar(userId=currentUser._id) |
|
|
|
|
span.full-name |
|
|
|
|
= currentUser.profile.fullname |
|
|
|
|
| (<span class="username">{{ currentUser.username }}</span>) |
|
|
|
|
if currentUser.isCardAssignee |
|
|
|
|
i.fa.fa-check |
|
|
|
|
|
|
|
|
|
template(name="userAvatarAssignee") |
|
|
|
|
a.assignee.js-assignee(title="{{userData.profile.fullname}} ({{userData.username}})") |
|
|
|
@ -349,11 +438,13 @@ template(name="cardAssigneePopup") |
|
|
|
|
p.quiet @{{ user.username }} |
|
|
|
|
ul.pop-over-list |
|
|
|
|
if currentUser.isNotCommentOnly |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
li: a.js-remove-assignee {{_ 'remove-member-from-card'}} |
|
|
|
|
|
|
|
|
|
if $eq currentUser._id user._id |
|
|
|
|
with currentUser |
|
|
|
|
li: a.js-edit-profile {{_ 'edit-profile'}} |
|
|
|
|
unless currentUser.isWorker |
|
|
|
|
if $eq currentUser._id user._id |
|
|
|
|
with currentUser |
|
|
|
|
li: a.js-edit-profile {{_ 'edit-profile'}} |
|
|
|
|
|
|
|
|
|
template(name="userAvatarAssigneeInitials") |
|
|
|
|
svg.avatar.avatar-assignee-initials(viewBox="0 0 {{viewPortWidth}} 15") |
|
|
|
|