summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/components/activities/activities.jade4
-rw-r--r--client/components/activities/activities.styl5
-rw-r--r--client/components/cards/cardDetails.jade10
-rw-r--r--client/components/cards/cardDetails.js9
-rw-r--r--client/components/cards/checklists.jade21
-rw-r--r--client/components/cards/checklists.js75
-rw-r--r--client/components/cards/checklists.styl40
-rw-r--r--client/components/forms/forms.styl53
-rw-r--r--client/components/lists/listBody.js4
9 files changed, 199 insertions, 22 deletions
diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade
index be12a728..deaee25e 100644
--- a/client/components/activities/activities.jade
+++ b/client/components/activities/activities.jade
@@ -31,7 +31,7 @@ template(name="boardActivities")
.activity-checklist(href="{{ card.absoluteUrl }}")
+viewer
= checklist.title
-
+
if($eq activityType 'addChecklistItem')
| {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}.
.activity-checklist(href="{{ card.absoluteUrl }}")
@@ -90,7 +90,7 @@ template(name="boardActivities")
template(name="cardActivities")
each currentCard.activities
- .activity
+ .activity.js-card-activity
+userAvatar(userId=user._id)
p.activity-desc
+memberName(user=user)
diff --git a/client/components/activities/activities.styl b/client/components/activities/activities.styl
index 2285fc0a..36efd771 100644
--- a/client/components/activities/activities.styl
+++ b/client/components/activities/activities.styl
@@ -1,5 +1,10 @@
@import 'nib'
+.activity-title
+ margin: 0 0.5em 0.8em
+ display: flex
+ justify-content:space-between
+
.activities
clear: both
diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade
index 09e0532c..60b20a8a 100644
--- a/client/components/cards/cardDetails.jade
+++ b/client/components/cards/cardDetails.jade
@@ -85,7 +85,15 @@ template(name="cardDetails")
+attachmentsGalery
hr
- h2 {{ _ 'activity'}}
+ .activity-title
+ h2 {{ _ 'activity'}}
+ .material-toggle-switch
+ span.toggle-switch-title {{_ 'hide-system-messages'}}
+ if hiddenSystemMessages
+ input.toggle-switch(type="checkbox" id="toggleButton" checked="checked" disabled)
+ else
+ input.toggle-switch(type="checkbox" id="toggleButton")
+ label.toggle-label(for="toggleButton")
if currentUser.isBoardMember
+commentForm
if isLoaded.get
diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js
index 7c6c3ce7..ecffe7aa 100644
--- a/client/components/cards/cardDetails.js
+++ b/client/components/cards/cardDetails.js
@@ -28,6 +28,11 @@ BlazeComponent.extendComponent({
return card.findWatcher(Meteor.userId());
},
+ hiddenSystemMessages() {
+ console.log('doo:', Meteor.user().hasHiddenSystemMessages());
+ return Meteor.user().hasHiddenSystemMessages();
+ },
+
canModifyCard() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
},
@@ -99,6 +104,9 @@ BlazeComponent.extendComponent({
this.parentComponent().showOverlay.set(true);
this.parentComponent().mouseHasEnterCardDetails = true;
},
+ 'click #toggleButton'() {
+ $('div.activity.js-card-activity:not(:has(.activity-comment))').toggle();
+ },
}];
},
}).register('cardDetails');
@@ -220,6 +228,7 @@ Template.copyCardPopup.events({
if (title) {
card.title = title;
+ card.coverId = '';
const _id = Cards.insert(card);
// In case the filter is active we need to add the newly inserted card in
// the list of exceptions -- cards that are not filtered. Otherwise the
diff --git a/client/components/cards/checklists.jade b/client/components/cards/checklists.jade
index e1dd1d14..9ff52d8e 100644
--- a/client/components/cards/checklists.jade
+++ b/client/components/cards/checklists.jade
@@ -1,8 +1,14 @@
template(name="checklists")
h2 {{_ 'checklists'}}
+ if toggleDeleteDialog.get
+ .board-overlay#card-details-overlay
+ +checklistDeleteDialog(checklist = checklistToDelete)
+
+
.card-checklist-items
each checklist in currentCard.checklists
+checklistDetail(checklist = checklist)
+
if canModifyCard
+inlinedForm(autoclose=false classNames="js-add-checklist" cardId = cardId)
+addChecklistItemForm
@@ -18,7 +24,8 @@ template(name="checklistDetail")
.checklist-title
.checkbox.fa.fa-check-square-o
if canModifyCard
- a.js-delete-checklist {{_ "delete"}}...
+ a.js-delete-checklist.toggle-delete-checklist-dialog {{_ "delete"}}...
+
span.checklist-stat(class="{{#if checklist.isFinished}}is-finished{{/if}}") {{checklist.finishedCount}}/{{checklist.itemCount}}
if canModifyCard
h2.title.js-open-inlined-form.is-editable {{checklist.title}}
@@ -26,6 +33,18 @@ template(name="checklistDetail")
h2.title {{checklist.title}}
+checklistItems(checklist = checklist)
+template(name="checklistDeleteDialog")
+ .js-confirm-checklist-delete
+ p
+ i(class="fa fa-exclamation-triangle" aria-hidden="true")
+ p
+ | {{_ 'confirm-checklist-delete-dialog'}}
+ span {{checklist.title}}
+ | ?
+ .js-checklist-delete-buttons
+ button.confirm-checklist-delete(type="button") {{_ 'delete'}}
+ button.toggle-delete-checklist-dialog(type="button") {{_ 'cancel'}}
+
template(name="addChecklistItemForm")
textarea.js-add-checklist-item(rows='1' autofocus)
.edit-controls.clearfix
diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js
index ba3384a9..1cd77c9f 100644
--- a/client/components/cards/checklists.js
+++ b/client/components/cards/checklists.js
@@ -66,6 +66,7 @@ Template.checklists.onRendered(function () {
});
BlazeComponent.extendComponent({
+
addChecklist(event) {
event.preventDefault();
const textarea = this.find('textarea.js-add-checklist-item');
@@ -101,6 +102,26 @@ BlazeComponent.extendComponent({
textarea.focus();
},
+ canModifyCard() {
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
+ },
+
+ deleteChecklist() {
+ const checklist = this.currentData().checklist;
+ if (checklist && checklist._id) {
+ Checklists.remove(checklist._id);
+ this.toggleDeleteDialog.set(false);
+ }
+ },
+
+ deleteItem() {
+ const checklist = this.currentData().checklist;
+ const item = this.currentData().item;
+ if (checklist && item && item._id) {
+ checklist.removeItem(item._id);
+ }
+ },
+
editChecklist(event) {
event.preventDefault();
const textarea = this.find('textarea.js-edit-checklist-item');
@@ -109,10 +130,6 @@ BlazeComponent.extendComponent({
checklist.setTitle(title);
},
- canModifyCard() {
- return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
- },
-
editChecklistItem(event) {
event.preventDefault();
@@ -123,19 +140,9 @@ BlazeComponent.extendComponent({
checklist.editItem(itemId, title);
},
- deleteItem() {
- const checklist = this.currentData().checklist;
- const item = this.currentData().item;
- if (checklist && item && item._id) {
- checklist.removeItem(item._id);
- }
- },
-
- deleteChecklist() {
- const checklist = this.currentData().checklist;
- if (checklist && checklist._id) {
- Checklists.remove(checklist._id);
- }
+ onCreated() {
+ this.toggleDeleteDialog = new ReactiveVar(false);
+ this.checklistToDelete = null; //Store data context to pass to checklistDeleteDialog template
},
pressKey(event) {
@@ -148,18 +155,50 @@ BlazeComponent.extendComponent({
},
events() {
+ const events = {
+ 'click .toggle-delete-checklist-dialog'(event) {
+ if($(event.target).hasClass('js-delete-checklist')){
+ this.checklistToDelete = this.currentData().checklist; //Store data context
+ }
+ this.toggleDeleteDialog.set(!this.toggleDeleteDialog.get());
+ },
+ };
+
return [{
+ ...events,
'submit .js-add-checklist': this.addChecklist,
'submit .js-edit-checklist-title': this.editChecklist,
'submit .js-add-checklist-item': this.addChecklistItem,
'submit .js-edit-checklist-item': this.editChecklistItem,
'click .js-delete-checklist-item': this.deleteItem,
- 'click .js-delete-checklist': this.deleteChecklist,
+ 'click .confirm-checklist-delete': this.deleteChecklist,
keydown: this.pressKey,
}];
},
}).register('checklists');
+Template.checklistDeleteDialog.onCreated(() => {
+ const $cardDetails = this.$('.card-details');
+ this.scrollState = { position: $cardDetails.scrollTop(), //save current scroll position
+ top: false, //required for smooth scroll animation
+ };
+ //Callback's purpose is to only prevent scrolling after animation is complete
+ $cardDetails.animate({ scrollTop: 0 }, 500, () => { this.scrollState.top = true; });
+
+ //Prevent scrolling while dialog is open
+ $cardDetails.on('scroll', () => {
+ if(this.scrollState.top) { //If it's already in position, keep it there. Otherwise let animation scroll
+ $cardDetails.scrollTop(0);
+ }
+ });
+});
+
+Template.checklistDeleteDialog.onDestroyed(() => {
+ const $cardDetails = this.$('.card-details');
+ $cardDetails.off('scroll'); //Reactivate scrolling
+ $cardDetails.animate( { scrollTop: this.scrollState.position });
+});
+
Template.itemDetail.helpers({
canModifyCard() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
diff --git a/client/components/cards/checklists.styl b/client/components/cards/checklists.styl
index 77668349..d4776397 100644
--- a/client/components/cards/checklists.styl
+++ b/client/components/cards/checklists.styl
@@ -38,6 +38,46 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
.js-delete-checklist
@extends .delete-text
+
+.js-confirm-checklist-delete
+ background-color: darken(white, 3%)
+ position: absolute
+ float: left;
+ width: 60%
+ margin-top: 0
+ margin-left: 13%
+ padding-bottom: 2%
+ padding-left: 3%
+ padding-right: 3%
+ z-index: 17
+ border-radius: 3px
+
+ p
+ position: relative
+ margin-top: 3%
+ width: 100%
+ text-align: center
+ span
+ font-weight: bold
+
+ i
+ font-size: 2em
+
+ .js-checklist-delete-buttons
+ position: relative
+ padding: left 2% right 2%
+ .confirm-checklist-delete
+ margin-left: 12%
+ float: left
+ .toggle-delete-checklist-dialog
+ margin-right: 12%
+ float: right
+
+#card-details-overlay
+ top: 0
+ bottom: -600px
+ right: 0
+
.checklist-items
margin: 0 0 0.5em 1.33em
diff --git a/client/components/forms/forms.styl b/client/components/forms/forms.styl
index 646da657..1947c11d 100644
--- a/client/components/forms/forms.styl
+++ b/client/components/forms/forms.styl
@@ -630,6 +630,59 @@ button
a, .quiet
color: white
+// Material Design Toggle Switch
+.material-toggle-switch
+ display: flex
+
+.toggle-label
+ position: relative
+ display: block
+ height: 20px
+ width: 44px
+ background-color: #a6a6a6
+ border-radius: 100px
+ cursor: pointer
+ transition: all 0.3s ease
+
+ &:after
+ position: absolute
+ left: -2px
+ top: -3px
+ display: block
+ width: 26px
+ height: 26px
+ border-radius: 100px
+ background-color: #fff
+ box-shadow: 0px 3px 3px rgba(0,0,0,0.05)
+ content: ''
+ transition: all 0.3s ease
+
+ &:active
+ &:after
+ transform: scale(1.15, 0.85)
+
+.toggle-switch:checked ~ .toggle-label
+ background-color: #6fbeb5
+
+ &:after
+ left: 20px
+ background-color: #179588
+
+.toggle-switch:checked:disabled ~ .toggle-label
+ background-color: #d5d5d5
+ pointer-events: none
+
+ &:after
+ background-color: #bcbdbc
+
+.toggle-switch
+ display: none
+
+.toggle-switch-title
+ margin: 0 0.5em
+ display: flex
+
+
@media screen and (max-width: 800px)
.edit-controls,
.add-controls
diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js
index 724e805b..794f33c2 100644
--- a/client/components/lists/listBody.js
+++ b/client/components/lists/listBody.js
@@ -83,6 +83,10 @@ BlazeComponent.extendComponent({
evt.stopImmediatePropagation();
evt.preventDefault();
Utils.goBoardId(Session.get('currentBoard'));
+ } else {
+ if (!Meteor.user().hasHiddenSystemMessages()) {
+ $('.toggle-switch').prop('checked', false);
+ }
}
},