diff options
Diffstat (limited to 'client/components/activities')
-rw-r--r-- | client/components/activities/activities.jade | 8 | ||||
-rw-r--r-- | client/components/activities/activities.js | 77 | ||||
-rw-r--r-- | client/components/activities/comments.jade | 0 | ||||
-rw-r--r-- | client/components/activities/comments.js | 0 | ||||
-rw-r--r-- | client/components/activities/events.js | 30 | ||||
-rw-r--r-- | client/components/activities/templates.html | 154 |
6 files changed, 269 insertions, 0 deletions
diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade new file mode 100644 index 00000000..1c6b9faf --- /dev/null +++ b/client/components/activities/activities.jade @@ -0,0 +1,8 @@ +template(name="activities") + .js-sidebar-activities + //- We should use Template.dynamic here but there is a bug with + //- blaze-components: https://github.com/peerlibrary/meteor-blaze-components/issues/30 + if $eq mode "board" + +boardActivities + else + +cardActivities diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js new file mode 100644 index 00000000..c806e87b --- /dev/null +++ b/client/components/activities/activities.js @@ -0,0 +1,77 @@ +var activitiesPerPage = 20; + +BlazeComponent.extendComponent({ + template: function() { + return 'activities'; + }, + + onCreated: function() { + var self = this; + // XXX Should we use ReactiveNumber? + self.page = new ReactiveVar(1); + self.loadNextPageLocked = false; + var sidebar = self.componentParent(); // XXX for some reason not working + sidebar.callFirstWith(null, 'resetNextPeak'); + self.autorun(function() { + var mode = self.data().mode; + var capitalizedMode = Utils.capitalize(mode); + var id = Session.get('current' + capitalizedMode); + var limit = self.page.get() * activitiesPerPage; + if (id === null) + return; + + self.subscribe('activities', mode, id, limit, function() { + self.loadNextPageLocked = false; + + // If the sibear peak hasn't increased, that mean that there are no more + // activities, and we can stop calling new subscriptions. + // XXX This is hacky! We need to know excatly and reactively how many + // activities there are, we probably want to denormalize this number + // dirrectly into card and board documents. + var a = sidebar.callFirstWith(null, 'getNextPeak'); + sidebar.calculateNextPeak(); + var b = sidebar.callFirstWith(null, 'getNextPeak'); + if (a === b) { + sidebar.callFirstWith(null, 'resetNextPeak'); + } + }); + }); + }, + + loadNextPage: function() { + if (this.loadNextPageLocked === false) { + this.page.set(this.page.get() + 1); + this.loadNextPageLocked = true; + } + }, + + boardLabel: function() { + return TAPi18n.__('this-board'); + }, + + cardLabel: function() { + return TAPi18n.__('this-card'); + }, + + cardLink: function() { + var card = this.currentData().card(); + return Blaze.toHTML(HTML.A({ + href: card.absoluteUrl(), + 'class': 'action-card' + }, card.title)); + }, + + memberLink: function() { + return Blaze.toHTMLWithData(Template.memberName, { + user: this.currentData().member() + }); + }, + + attachmentLink: function() { + var attachment = this.currentData().attachment(); + return Blaze.toHTML(HTML.A({ + href: attachment.url(), + 'class': 'js-open-attachment-viewer' + }, attachment.name())); + } +}).register('activities'); diff --git a/client/components/activities/comments.jade b/client/components/activities/comments.jade new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/client/components/activities/comments.jade diff --git a/client/components/activities/comments.js b/client/components/activities/comments.js new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/client/components/activities/comments.js diff --git a/client/components/activities/events.js b/client/components/activities/events.js new file mode 100644 index 00000000..ea98e65f --- /dev/null +++ b/client/components/activities/events.js @@ -0,0 +1,30 @@ +Template.cardActivities.events({ + 'click .js-edit-action': function(evt) { + var $this = $(evt.currentTarget); + var container = $this.parents('.phenom-comment'); + + // open and focus + container.addClass('editing'); + container.find('textarea').focus(); + }, + 'click .js-confirm-delete-action': function() { + CardComments.remove(this._id); + }, + 'submit form': function(evt) { + var $this = $(evt.currentTarget); + var container = $this.parents('.phenom-comment'); + var text = container.find('textarea'); + + if ($.trim(text.val())) { + CardComments.update(this._id, { + $set: { + text: text.val() + } + }); + + // reset editing class + $('.editing').removeClass('editing'); + } + evt.preventDefault(); + } +}); diff --git a/client/components/activities/templates.html b/client/components/activities/templates.html new file mode 100644 index 00000000..8d3ff763 --- /dev/null +++ b/client/components/activities/templates.html @@ -0,0 +1,154 @@ +<template name="boardActivities"> + {{# each currentBoard.activities }} + <div class="phenom phenom-action clearfix phenom-other"> + {{> userAvatar user=user size="extra-small" class="creator js-show-mem-menu" }} + <div class="phenom-desc"> + {{ > memberName user=user }} + + {{# if $eq activityType 'createBoard' }} + {{_ 'activity-created' boardLabel}}. + {{ /if }} + + {{# if $eq activityType 'createList' }} + {{_ 'activity-added' list.title boardLabel}}. + {{ /if }} + + {{# if $eq activityType 'archivedList' }} + {{_ 'activity-archived' list.title}}. + {{ /if }} + + {{# if $eq activityType 'createCard' }} + {{{_ 'activity-added' cardLink boardLabel}}}. + {{ /if }} + + {{# if $eq activityType 'archivedCard' }} + {{{_ 'activity-archived' cardLink}}}. + {{ /if }} + + {{# if $eq activityType 'restoredCard' }} + {{{_ 'activity-sent' cardLink boardLabel}}}. + {{ /if }} + + {{# if $eq activityType 'moveCard' }} + {{{_ 'activity-moved' cardLink oldList.title list.title}}}. + {{ /if }} + + {{# if $eq activityType 'addBoardMember' }} + {{{_ 'activity-added' memberLink boardLabel}}}. + {{ /if }} + + {{# if $eq activityType 'removeBoardMember' }} + {{{_ 'activity-excluded' memberLink boardLabel}}}. + {{ /if }} + + {{# if $eq activityType 'joinMember' }} + {{# if $eq currentUser._id member._id }} + {{{_ 'activity-joined' cardLink}}}. + {{ else }} + {{{_ 'activity-added' memberLink cardLink}}}. + {{/if}} + {{ /if }} + + {{# if $eq activityType 'unjoinMember' }} + {{# if $eq currentUser._id member._id }} + {{{_ 'activity-unjoined' cardLink}}}. + {{ else }} + {{{_ 'activity-removed' memberLink cardLink}}}. + {{/if}} + {{ /if }} + + {{# if $eq activityType 'addComment' }} + <div class="phenom-desc"> + {{{_ 'activity-on' cardLink}}} + <div class="action-comment markeddown"> + <a href="{{ card.absoluteUrl }}" class="current-comment show tdn"> + <p>{{#viewer}}{{ comment.text }}{{/viewer}}</p> + </a> + </div> + </div> + {{ /if }} + + {{# if $eq activityType 'addAttachment' }} + <div class="phenom-desc"> + {{{_ 'activity-attached' attachmentLink cardLink}}}. + </div> + {{ /if }} + </div> + <p class="phenom-meta quiet"> + <span class="date js-hide-on-sending"> + {{ moment createdAt }} + </span> + </p> + </div> + {{ /each }} +</template> + +<template name="cardActivities"> + {{# each currentCard.comments }} + <div class="phenom phenom-action clearfix phenom-comment"> + {{> userAvatar user=user size="small" class="creator js-show-mem-menu" }} + <form> + <div class="phenom-desc"> + {{ > memberName user=user }} + <div class="action-comment markeddown"> + <div class="current-comment"> + {{#viewer}}{{ text }}{{/viewer}} + </div> + <textarea class="js-text" tabindex="1">{{ text }}</textarea> + </div> + </div> + <div class="edit-controls clearfix"> + <input type="submit" class="primary confirm js-save-edit" value="{{_ 'save'}}" tabindex="2"> + </div> + </form> + <p class="phenom-meta quiet"> + <span class="date js-hide-on-sending">{{ moment createdAt }}</span> + {{# if currentUser }} + <span class="js-hide-on-sending"> + - <a href="#" class="js-edit-action">{{_ "edit"}}</a> + - <a href="#" class="js-confirm-delete-action">{{_ "delete"}}</a> + </span> + {{/ if }} + </p> + </div> + {{/each}} + + {{# each currentCard.activities }} + <div class="phenom phenom-action clearfix phenom-other"> + {{> userAvatar user=user size="extra-small" class="creator js-show-mem-menu" }} + {{ > memberName user=user }} + {{# if $eq activityType 'createCard' }} + {{_ 'activity-added' cardLabel list.title}}. + {{ /if }} + {{# if $eq activityType 'joinMember' }} + {{# if $eq currentUser._id member._id }} + {{_ 'activity-joined' cardLabel}}. + {{ else }} + {{{_ 'activity-added' cardLabel memberLink}}}. + {{/if}} + {{/if}} + {{# if $eq activityType 'unjoinMember' }} + {{# if $eq currentUser._id member._id }} + {{_ 'activity-unjoined' cardLabel}}. + {{ else }} + {{{_ 'activity-removed' cardLabel memberLink}}}. + {{/if}} + {{ /if }} + {{# if $eq activityType 'archivedCard' }} + {{_ 'activity-archived' cardLabel}}. + {{ /if }} + {{# if $eq activityType 'restoredCard' }} + {{_ 'activity-sent' cardLabel boardLabel}}. + {{/ if }} + {{# if $eq activityType 'moveCard' }} + {{_ 'activity-moved' cardLabel oldList.title list.title}}. + {{/ if }} + {{# if $eq activityType 'addAttachment' }} + {{{_ 'activity-attached' attachmentLink cardLabel}}}. + {{# if attachment.isImage }} + <img src="{{ attachment.url }}" class="attachment-image-preview"> + {{/if}} + {{/ if}} + </div> + {{/each}} +</template> |