diff --git a/package.json b/package.json index c41a78f7a6..0633e8d73f 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "0.4.2", "nodebb-rewards-essentials": "0.0.5", "nodebb-theme-lavender": "2.0.1", - "nodebb-theme-persona": "3.0.13", - "nodebb-theme-vanilla": "4.0.8", + "nodebb-theme-persona": "3.0.14", + "nodebb-theme-vanilla": "4.0.9", "nodebb-widget-essentials": "2.0.1", "npm": "^2.1.4", "passport": "^0.3.0", diff --git a/public/src/client/chats.js b/public/src/client/chats.js index 201636787b..eee0139f55 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -155,7 +155,33 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', data.message.newSet = lastSpeaker !== data.message.fromuid; Chats.parseMessage(data.message, onMessagesParsed); } else { - $('.chats-list li[data-uid="' + data.withUid + '"]').addClass('unread'); + var contactEl = $('.chats-list li[data-uid="' + data.withUid + '"]'), + userKey = data.withUid === data.message.fromuid ? 'fromUser' : 'toUser'; + + // Spawn a new contact if required + if (!contactEl.length) { + templates.parse('partials/chat_contact', { + uid: data.withUid, + username: data.message[userKey].username, + status: data.message[userKey].status, + picture: data.message[userKey].picture, + teaser: { + content: data.message.cleanedContent, + timestampISO: new Date(Date.now()).toISOString() + } + }, function(html) { + translator.translate(html, function(translatedHTML) { + $('.chats-list').prepend(translatedHTML); + + // Mark that contact list entry unread + $('.chats-list li[data-uid="' + data.withUid + '"]').addClass('unread').find('.timeago').timeago(); + }); + }); + } else { + // Mark that contact list entry unread + $('.chats-list li[data-uid="' + data.withUid + '"]').addClass('unread'); + } + app.alternatingTitle('[[modules:chat.user_has_messaged_you, ' + data.message.fromUser.username + ']]'); } }); diff --git a/src/messaging.js b/src/messaging.js index 710288afec..81f8b3b818 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -145,7 +145,7 @@ var db = require('./database'), }; function getMessages(mids, fromuid, touid, isNew, callback) { - user.getMultipleUserFields([fromuid, touid], ['uid', 'username', 'userslug', 'picture'], function(err, userData) { + user.getMultipleUserFields([fromuid, touid], ['uid', 'username', 'userslug', 'picture', 'status'], function(err, userData) { if(err) { return callback(err); } @@ -168,6 +168,7 @@ var db = require('./database'), Messaging.parse(message.content, message.fromuid, fromuid, userData[1], userData[0], isNew, function(result) { message.content = result; + message.cleanedContent = S(result).stripTags().decodeHTMLEntities().s; next(null, message); }); }, next);