FEATURE: remove bookmark button in activity feed
This commit is contained in:
@@ -102,9 +102,8 @@ Discourse.UserAction = Discourse.Model.extend({
|
||||
presentName: Em.computed.any('name', 'username'),
|
||||
targetDisplayName: Em.computed.any('target_name', 'target_username'),
|
||||
actingDisplayName: Em.computed.any('acting_name', 'acting_username'),
|
||||
|
||||
|
||||
targetUserUrl: Discourse.computed.url('target_username', '/users/%@'),
|
||||
|
||||
usernameLower: function() {
|
||||
return this.get('username').toLowerCase();
|
||||
}.property('username'),
|
||||
@@ -122,6 +121,7 @@ Discourse.UserAction = Discourse.Model.extend({
|
||||
replyType: Em.computed.equal('action_type', UserActionTypes.replies),
|
||||
postType: Em.computed.equal('action_type', UserActionTypes.posts),
|
||||
topicType: Em.computed.equal('action_type', UserActionTypes.topics),
|
||||
bookmarkType: Em.computed.equal('action_type', UserActionTypes.bookmarks),
|
||||
messageSentType: Em.computed.equal('action_type', UserActionTypes.messages_sent),
|
||||
messageReceivedType: Em.computed.equal('action_type', UserActionTypes.messages_received),
|
||||
mentionType: Em.computed.equal('action_type', UserActionTypes.mentions),
|
||||
@@ -168,7 +168,11 @@ Discourse.UserAction = Discourse.Model.extend({
|
||||
});
|
||||
}
|
||||
return rval;
|
||||
}.property("childGroups"),
|
||||
}.property("childGroups",
|
||||
"childGroups.likes.items", "childGroups.likes.items.@each",
|
||||
"childGroups.stars.items", "childGroups.stars.items.@each",
|
||||
"childGroups.edits.items", "childGroups.edits.items.@each",
|
||||
"childGroups.bookmarks.items", "childGroups.bookmarks.items.@each"),
|
||||
|
||||
switchToActing: function() {
|
||||
this.setProperties({
|
||||
@@ -193,7 +197,6 @@ Discourse.UserAction.reopenClass({
|
||||
var current;
|
||||
if (Discourse.UserAction.TO_COLLAPSE.indexOf(item.action_type) >= 0) {
|
||||
current = Discourse.UserAction.create(item);
|
||||
current.setProperties({action_type: null, description: null});
|
||||
item.switchToActing();
|
||||
current.addChild(item);
|
||||
} else {
|
||||
@@ -217,11 +220,13 @@ Discourse.UserAction.reopenClass({
|
||||
TYPES: UserActionTypes,
|
||||
TYPES_INVERTED: InvertedActionTypes,
|
||||
|
||||
TO_COLLAPSE: [UserActionTypes.likes_given,
|
||||
UserActionTypes.likes_received,
|
||||
UserActionTypes.starred,
|
||||
UserActionTypes.edits,
|
||||
UserActionTypes.bookmarks],
|
||||
TO_COLLAPSE: [
|
||||
UserActionTypes.likes_given,
|
||||
UserActionTypes.likes_received,
|
||||
UserActionTypes.starred,
|
||||
UserActionTypes.edits,
|
||||
UserActionTypes.bookmarks
|
||||
],
|
||||
|
||||
TO_SHOW: [
|
||||
UserActionTypes.likes_given,
|
||||
@@ -234,6 +239,3 @@ Discourse.UserAction.reopenClass({
|
||||
]
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -36,6 +36,30 @@ Discourse.UserStream = Discourse.Model.extend({
|
||||
return this.findItems();
|
||||
},
|
||||
|
||||
remove: function(userAction) {
|
||||
// 1) remove the user action from the child groups
|
||||
this.get("content").forEach(function (ua) {
|
||||
["likes", "stars", "edits", "bookmarks"].forEach(function (group) {
|
||||
var items = ua.get("childGroups." + group + ".items");
|
||||
if (items) {
|
||||
items.removeObject(userAction);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 2) remove the parents that have no children
|
||||
var content = this.get("content").filter(function (ua) {
|
||||
return ["likes", "stars", "edits", "bookmarks"].any(function (group) {
|
||||
return ua.get("childGroups." + group + ".items.length") > 0;
|
||||
});
|
||||
});
|
||||
|
||||
this.setProperties({
|
||||
content: content,
|
||||
itemsLoaded: content.length
|
||||
});
|
||||
},
|
||||
|
||||
findItems: function() {
|
||||
var userStream = this;
|
||||
if(this.get('loading')) { return Ember.RSVP.reject(); }
|
||||
|
||||
@@ -36,4 +36,4 @@ Discourse.UserActivityRoute = Discourse.Route.extend({
|
||||
|
||||
});
|
||||
|
||||
Discourse.UserPrivateMessagesRoute = Discourse.UserActivityRoute.extend({});
|
||||
Discourse.UserPrivateMessagesRoute = Discourse.UserActivityRoute.extend({});
|
||||
|
||||
@@ -24,6 +24,25 @@ Discourse.UserActivityStreamRoute = Discourse.Route.extend({
|
||||
this.controllerFor('user_activity').set('userActionType', this.get('userActionType'));
|
||||
|
||||
this.controllerFor('user').set('indexStream', !this.get('userActionType'));
|
||||
},
|
||||
|
||||
actions: {
|
||||
|
||||
removeBookmark: function(userAction) {
|
||||
var self = this;
|
||||
Discourse.ajax("/posts/by_number/" + userAction.topic_id + "/" + userAction.post_number + "/bookmarks/remove", { type: "PUT" })
|
||||
.then(function() {
|
||||
// remove the user action from the stream
|
||||
self.modelFor("user").get("stream").remove(userAction);
|
||||
// update the counts
|
||||
self.modelFor("user").get("stats").forEach(function (stat) {
|
||||
if (stat.get("action_type") === userAction.action_type) {
|
||||
stat.decrementProperty("count");
|
||||
}
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -8,13 +8,17 @@
|
||||
</span>
|
||||
<span class="type">{{unbound descriptionHtml}}</span>
|
||||
</div>
|
||||
<p class='excerpt'>
|
||||
{{{unbound excerpt}}}
|
||||
</p>
|
||||
<p class='excerpt'>{{{unbound excerpt}}}</p>
|
||||
{{#groupedEach children}}
|
||||
<div class='child-actions'>
|
||||
<i class="icon {{unbound icon}}"></i>
|
||||
{{#groupedEach items}}
|
||||
{{#if bookmarkType}}
|
||||
<button class="btn btn-default remove-bookmark" {{action removeBookmark this}}>
|
||||
<i class="fa fa-times"></i>
|
||||
{{i18n "bookmarks.remove"}}
|
||||
</button>
|
||||
{{/if}}
|
||||
<a href="{{unbound userUrl}}" class='avatar-link'><div class='avatar-wrapper'>{{avatar this imageSize="tiny" extraClasses="actor" ignoreTitle="true"}}</div></a>
|
||||
{{#if edit_reason}} — <span class="edit-reason">{{unbound edit_reason}}</span>{{/if}}
|
||||
{{/groupedEach}}
|
||||
|
||||
@@ -10,7 +10,7 @@ Discourse.ActivityFilterView = Ember.Component.extend({
|
||||
tagName: 'li',
|
||||
classNameBindings: ['active', 'noGlyph'],
|
||||
|
||||
shouldRerender: Discourse.View.renderIfChanged('count'),
|
||||
shouldRerender: Discourse.View.renderIfChanged('content.count', 'count'),
|
||||
noGlyph: Em.computed.empty('icon'),
|
||||
|
||||
active: function() {
|
||||
@@ -23,11 +23,10 @@ Discourse.ActivityFilterView = Ember.Component.extend({
|
||||
}.property('userActionType', 'indexStream'),
|
||||
|
||||
activityCount: function() {
|
||||
return this.get('content.count') || this.get('count');
|
||||
return this.get('content.count') || this.get('count') || 0;
|
||||
}.property('content.count', 'count'),
|
||||
|
||||
typeKey: function() {
|
||||
|
||||
var actionType = this.get('content.action_type');
|
||||
if (actionType === Discourse.UserAction.TYPES.messages_received) { return ""; }
|
||||
|
||||
@@ -52,23 +51,17 @@ Discourse.ActivityFilterView = Ember.Component.extend({
|
||||
if (icon) {
|
||||
buffer.push("<i class='glyph fa fa-" + icon + "'></i> ");
|
||||
}
|
||||
|
||||
buffer.push(this.get('description') + " <span class='count'>(" + this.get('activityCount') + ")</span>");
|
||||
buffer.push("<span class='fa fa-chevron-right'></span></a>");
|
||||
},
|
||||
|
||||
icon: function(){
|
||||
switch(parseInt(this.get('content.action_type'),10)) {
|
||||
case Discourse.UserAction.TYPES.likes_received:
|
||||
return "heart";
|
||||
case Discourse.UserAction.TYPES.bookmarks:
|
||||
return "bookmark";
|
||||
case Discourse.UserAction.TYPES.edits:
|
||||
return "pencil";
|
||||
case Discourse.UserAction.TYPES.replies:
|
||||
return "reply";
|
||||
case Discourse.UserAction.TYPES.starred:
|
||||
return "star";
|
||||
icon: function() {
|
||||
switch(parseInt(this.get('content.action_type'), 10)) {
|
||||
case Discourse.UserAction.TYPES.likes_received: return "heart";
|
||||
case Discourse.UserAction.TYPES.bookmarks: return "bookmark";
|
||||
case Discourse.UserAction.TYPES.edits: return "pencil";
|
||||
case Discourse.UserAction.TYPES.replies: return "reply";
|
||||
case Discourse.UserAction.TYPES.starred: return "star";
|
||||
}
|
||||
}.property("content.action_type")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user