mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 07:37:25 +01:00
chat: add +1 (like) to messages. @snicker does views/options/social/chat-message.jade flag you for any performance issues which should be optimized with bindonce? (I'm still a bit of a bo-noob)
This commit is contained in:
@@ -16,6 +16,11 @@
|
||||
position: relative
|
||||
z-index: 10
|
||||
|
||||
.chat-message .chat-plus-one
|
||||
opacity: 0
|
||||
.chat-message:hover .chat-plus-one
|
||||
opacity: 1
|
||||
|
||||
.tavern-chat, .party-chat
|
||||
|
||||
li
|
||||
|
||||
@@ -127,7 +127,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A
|
||||
});
|
||||
}])
|
||||
|
||||
.controller('ChatCtrl', ['$scope', 'Groups', 'User', function($scope, Groups, User){
|
||||
.controller('ChatCtrl', ['$scope', 'Groups', 'User', '$http', 'API_URL', 'Notification', function($scope, Groups, User, $http, API_URL, Notification){
|
||||
$scope.message = {content:''};
|
||||
$scope._sending = false;
|
||||
|
||||
@@ -178,6 +178,20 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A
|
||||
}
|
||||
}
|
||||
|
||||
$scope.likeChatMessage = function(group,message) {
|
||||
if (message.uuid == User.user._id)
|
||||
return Notification.text("Can't like your own message. Don't be that person.");
|
||||
if (!message.likes) message.likes = {};
|
||||
if (message.likes[User.user._id]) {
|
||||
delete message.likes[User.user._id];
|
||||
} else {
|
||||
message.likes[User.user._id] = true;
|
||||
}
|
||||
//Chat.Chat.like({gid:group._id,mid:message.id});
|
||||
|
||||
$http.post(API_URL + '/api/v2/groups/' + group._id + '/chat/' + message.id + '/like');
|
||||
}
|
||||
|
||||
$scope.sync = function(group){
|
||||
group.$get();
|
||||
}
|
||||
|
||||
@@ -47,4 +47,20 @@ angular.module('groupServices', ['ngResource']).
|
||||
Group: Group
|
||||
}
|
||||
}
|
||||
]);
|
||||
])
|
||||
/**
|
||||
* TODO Get this working. Make ChatService it's own ngResource, so we can update chat without having to sync the whole
|
||||
* group object (expensive). Also so we can add chat-specific routes
|
||||
*/
|
||||
// .factory('Chat', ['API_URL', '$resource',
|
||||
// function(API_URL, $resource) {
|
||||
// var Chat = $resource(API_URL + '/api/v2/groups/:gid/chat/:mid',
|
||||
// //{gid:'@_id', mid: '@_messageId'},
|
||||
// {
|
||||
// like: {method: 'POST', url: API_URL + '/api/v2/groups/:gid/chat/:mid'}
|
||||
// //postChat: {method: "POST", url: API_URL + '/api/v2/groups/:gid/chat'},
|
||||
// //deleteChatMessage: {method: "DELETE", url: API_URL + '/api/v2/groups/:gid/chat/:messageId'},
|
||||
// });
|
||||
// return {Chat:Chat};
|
||||
// }
|
||||
// ]);
|
||||
|
||||
@@ -243,6 +243,24 @@ api.deleteChatMessage = function(req, res){
|
||||
});
|
||||
}
|
||||
|
||||
api.likeChatMessage = function(req, res) {
|
||||
var user = res.locals.user;
|
||||
var group = res.locals.group;
|
||||
var message = _.find(group.chat, {id: req.params.mid});
|
||||
if (!message) return res.json(404, {err: "Message not found!"});
|
||||
if (message.uuid == user._id) return res.json(401, {err: "Can't like your own message. Don't be that person."});
|
||||
if (!message.likes) message.likes = {};
|
||||
if (message.likes[user._id]) {
|
||||
delete message.likes[user._id];
|
||||
} else {
|
||||
message.likes[user._id] = true;
|
||||
}
|
||||
group.markModified('chat');
|
||||
group.save(function(err,_saved){
|
||||
return res.send(_saved.chat);
|
||||
})
|
||||
}
|
||||
|
||||
api.join = function(req, res) {
|
||||
var user = res.locals.user,
|
||||
group = res.locals.group;
|
||||
|
||||
@@ -92,7 +92,8 @@ GroupSchema.methods.sendChat = function(message, user){
|
||||
var message = {
|
||||
id: shared.uuid(),
|
||||
text: message,
|
||||
timestamp: +(new Date)
|
||||
timestamp: +(new Date),
|
||||
likes: {}
|
||||
};
|
||||
if (user) {
|
||||
_.defaults(message, {
|
||||
|
||||
@@ -483,6 +483,17 @@ module.exports = (swagger, v2) ->
|
||||
middleware: [auth.auth, groups.attachGroup]
|
||||
action: groups.deleteChatMessage
|
||||
|
||||
"/groups/{gid}/chat/{mid}/like":
|
||||
spec:
|
||||
method: 'POST'
|
||||
description: "Like a chat message"
|
||||
params: [
|
||||
path 'gid','Group id','string'
|
||||
path 'mid','Message id','string'
|
||||
]
|
||||
middleware: [auth.auth, groups.attachGroup]
|
||||
action: groups.likeChatMessage
|
||||
|
||||
# ---------------------------------
|
||||
# Members
|
||||
# ---------------------------------
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
li(bindonce='group.chat', ng-repeat='message in group.chat', bo-class='{highlight: isUserMentioned(user,message), "own-message": user._id == message.uuid}')
|
||||
li.chat-message(bindonce='group.chat', ng-repeat='message in group.chat', bo-class='{highlight: isUserMentioned(user,message), "own-message": user._id == message.uuid}')
|
||||
div(class='scrollable-message')
|
||||
a.label.chat-message(class='hidden-label')
|
||||
span {{message.user}}
|
||||
|
|
||||
markdown(ng-model='message.text',target='_blank')
|
||||
| -
|
||||
span.muted.time(from-now='message.timestamp')
|
||||
markdown(ng-model='message.text',target='_blank', style='padding:0px 2px')
|
||||
| -
|
||||
span.muted.time(from-now='message.timestamp',style='padding:0px 2px')
|
||||
span(style='padding:0px 2px')
|
||||
a.label(ng-show='countExists(message.likes)',ng-class='{"label-success":message.likes[user._id]}',ng-click='likeChatMessage(group,message)') +{{countExists(message.likes)}}
|
||||
a.chat-plus-one.muted(ng-show='!countExists(message.likes)',ng-click='likeChatMessage(group,message)',style='background-color:#eee;padding:2px') +1
|
||||
a(bo-show='user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)')
|
||||
|
|
||||
|
|
||||
i.icon-remove(tooltip='Delete')
|
||||
a.label.chat-message(bo-show='message.user', class='float-label', bo-class='{"label-npc": message.backer.npc, "label-contributor-{{message.contributor.level}}":message.contributor.level}', ng-click='clickMember(message.uuid, true)')
|
||||
span(tooltip='{{contribText(message.contributor, message.backer)}}') {{message.user}}
|
||||
Reference in New Issue
Block a user