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
|
position: relative
|
||||||
z-index: 10
|
z-index: 10
|
||||||
|
|
||||||
|
.chat-message .chat-plus-one
|
||||||
|
opacity: 0
|
||||||
|
.chat-message:hover .chat-plus-one
|
||||||
|
opacity: 1
|
||||||
|
|
||||||
.tavern-chat, .party-chat
|
.tavern-chat, .party-chat
|
||||||
|
|
||||||
li
|
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.message = {content:''};
|
||||||
$scope._sending = false;
|
$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){
|
$scope.sync = function(group){
|
||||||
group.$get();
|
group.$get();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,4 +47,20 @@ angular.module('groupServices', ['ngResource']).
|
|||||||
Group: Group
|
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) {
|
api.join = function(req, res) {
|
||||||
var user = res.locals.user,
|
var user = res.locals.user,
|
||||||
group = res.locals.group;
|
group = res.locals.group;
|
||||||
|
|||||||
@@ -92,7 +92,8 @@ GroupSchema.methods.sendChat = function(message, user){
|
|||||||
var message = {
|
var message = {
|
||||||
id: shared.uuid(),
|
id: shared.uuid(),
|
||||||
text: message,
|
text: message,
|
||||||
timestamp: +(new Date)
|
timestamp: +(new Date),
|
||||||
|
likes: {}
|
||||||
};
|
};
|
||||||
if (user) {
|
if (user) {
|
||||||
_.defaults(message, {
|
_.defaults(message, {
|
||||||
|
|||||||
@@ -483,6 +483,17 @@ module.exports = (swagger, v2) ->
|
|||||||
middleware: [auth.auth, groups.attachGroup]
|
middleware: [auth.auth, groups.attachGroup]
|
||||||
action: groups.deleteChatMessage
|
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
|
# 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')
|
div(class='scrollable-message')
|
||||||
a.label.chat-message(class='hidden-label')
|
a.label.chat-message(class='hidden-label')
|
||||||
span {{message.user}}
|
span {{message.user}}
|
||||||
|
|
markdown(ng-model='message.text',target='_blank', style='padding:0px 2px')
|
||||||
markdown(ng-model='message.text',target='_blank')
|
| -
|
||||||
| -
|
span.muted.time(from-now='message.timestamp',style='padding:0px 2px')
|
||||||
span.muted.time(from-now='message.timestamp')
|
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)')
|
a(bo-show='user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)')
|
||||||
|
|
|
|
||||||
i.icon-remove(tooltip='Delete')
|
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)')
|
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}}
|
span(tooltip='{{contribText(message.contributor, message.backer)}}') {{message.user}}
|
||||||
Reference in New Issue
Block a user