mirror of
https://github.com/darkwire/darkwire.io.git
synced 2025-07-18 18:54:52 +00:00
Merge pull request #37 from seripap/feature/timestamps
Added skype-ish style timestamps
This commit is contained in:
commit
0938037e18
@ -1,6 +1,7 @@
|
|||||||
import _ from 'underscore';
|
import _ from 'underscore';
|
||||||
import sanitizeHtml from 'sanitize-html';
|
import sanitizeHtml from 'sanitize-html';
|
||||||
import he from 'he';
|
import he from 'he';
|
||||||
|
import moment from 'moment';
|
||||||
|
|
||||||
// TODO: Remove in v2.0
|
// TODO: Remove in v2.0
|
||||||
let warned = false;
|
let warned = false;
|
||||||
@ -17,6 +18,7 @@ export default class Chat {
|
|||||||
this.messages = $('.messages'); // Messages area
|
this.messages = $('.messages'); // Messages area
|
||||||
this.inputMessage = $('.inputMessage'); // Input message input box
|
this.inputMessage = $('.inputMessage'); // Input message input box
|
||||||
this.chatPage = $('.chat.page');
|
this.chatPage = $('.chat.page');
|
||||||
|
this.lastMessageTime = null;
|
||||||
this.bindEvents();
|
this.bindEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,11 +337,13 @@ export default class Chat {
|
|||||||
.css('color', this.getUsernameColor(data.username));
|
.css('color', this.getUsernameColor(data.username));
|
||||||
|
|
||||||
let $messageBodyDiv = $('<span class="messageBody">');
|
let $messageBodyDiv = $('<span class="messageBody">');
|
||||||
|
let timestamp = this.getTimestamp(data.typing);
|
||||||
|
|
||||||
if (messageType === 'text' || messageType === 'action') {
|
if (messageType === 'text' || messageType === 'action') {
|
||||||
if (messageType === 'action') {
|
if (messageType === 'action') {
|
||||||
$usernameDiv.css('color','').prepend('*');
|
$usernameDiv.css('color','').prepend('*');
|
||||||
}
|
}
|
||||||
|
|
||||||
let unescapedMessage = unescape(data.message);
|
let unescapedMessage = unescape(data.message);
|
||||||
let lineBreaks = /<br \/>/g;
|
let lineBreaks = /<br \/>/g;
|
||||||
unescapedMessage = unescapedMessage.replace(lineBreaks, '<br />');
|
unescapedMessage = unescapedMessage.replace(lineBreaks, '<br />');
|
||||||
@ -355,11 +359,28 @@ export default class Chat {
|
|||||||
.data('username', data.username)
|
.data('username', data.username)
|
||||||
.addClass(typingClass)
|
.addClass(typingClass)
|
||||||
.addClass(actionClass)
|
.addClass(actionClass)
|
||||||
.append($usernameDiv, $messageBodyDiv);
|
.append(timestamp, $usernameDiv, $messageBodyDiv);
|
||||||
|
|
||||||
this.addMessageElement($messageDiv, options);
|
this.addMessageElement($messageDiv, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getTimestamp(isTyping) {
|
||||||
|
if (isTyping) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
let now = moment(new Date()).format('LT');
|
||||||
|
|
||||||
|
if (this.lastMessageTime === now) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.lastMessageTime = now;
|
||||||
|
|
||||||
|
return '<span class="timestamp">' + now + '</span>';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
addMessageElement(el, options) {
|
addMessageElement(el, options) {
|
||||||
let $el = $(el);
|
let $el = $(el);
|
||||||
|
|
||||||
|
@ -319,7 +319,6 @@ export default class Darkwire {
|
|||||||
username: username,
|
username: username,
|
||||||
message: decryptedMessage,
|
message: decryptedMessage,
|
||||||
messageType: data.messageType,
|
messageType: data.messageType,
|
||||||
timestamp: data.timestamp
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -350,3 +350,11 @@ html.no-touchevents .chat #input-icons {
|
|||||||
font-style: italic;
|
font-style: italic;
|
||||||
color: #00FF7F;
|
color: #00FF7F;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.timestamp {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #CCC;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: italic;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
@ -27,7 +27,6 @@ class Room {
|
|||||||
vector: data.vector,
|
vector: data.vector,
|
||||||
secretKeys: data.secretKeys,
|
secretKeys: data.secretKeys,
|
||||||
signature: data.signature,
|
signature: data.signature,
|
||||||
timestamp: new Date()
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -48,7 +47,6 @@ class Room {
|
|||||||
username: socket.username,
|
username: socket.username,
|
||||||
numUsers: this.numUsers,
|
numUsers: this.numUsers,
|
||||||
users: this.users,
|
users: this.users,
|
||||||
timestamp: new Date()
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -78,7 +76,6 @@ class Room {
|
|||||||
numUsers: this.numUsers,
|
numUsers: this.numUsers,
|
||||||
users: this.users,
|
users: this.users,
|
||||||
id: socket.user.id,
|
id: socket.user.id,
|
||||||
timestamp: new Date()
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// remove room from rooms array
|
// remove room from rooms array
|
||||||
@ -105,7 +102,6 @@ class Room {
|
|||||||
thisIO.emit('user update', {
|
thisIO.emit('user update', {
|
||||||
username: socket.username,
|
username: socket.username,
|
||||||
id: socket.user.id,
|
id: socket.user.id,
|
||||||
timestamp: new Date()
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*jshint -W030 */
|
/*jshint -W030 */
|
||||||
import App from '../../package.json';
|
import App from '../../package.json';
|
||||||
|
import moment from 'moment';
|
||||||
|
|
||||||
describe('Darkwire', () => {
|
describe('Darkwire', () => {
|
||||||
|
|
||||||
@ -62,12 +63,14 @@ describe('Darkwire', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('Sending chat message', () => {
|
describe('Sending chat message', () => {
|
||||||
|
let timestamp = null;
|
||||||
|
|
||||||
before((client, done) => {
|
before((client, done) => {
|
||||||
browser
|
browser
|
||||||
.waitForElementPresent('ul.users li:nth-child(2)', 5000)
|
.waitForElementPresent('ul.users li:nth-child(2)', 5000)
|
||||||
.waitForElementPresent('textarea.inputMessage', 5000)
|
.waitForElementPresent('textarea.inputMessage', 5000)
|
||||||
.setValue('textarea.inputMessage', ['Hello world!', browser.Keys.RETURN], () => {
|
.setValue('textarea.inputMessage', ['Hello world!', browser.Keys.RETURN], () => {
|
||||||
|
timestamp = moment(new Date()).format('LT');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -82,6 +85,16 @@ describe('Darkwire', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Should show correct timestamp', () => {
|
||||||
|
browser.windowHandles((result) => {
|
||||||
|
browser.switchWindow(result.value[0], () => {
|
||||||
|
browser
|
||||||
|
.waitForElementVisible('span.timestamp', 5000)
|
||||||
|
.assert.containsText('span.timestamp', timestamp);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Slash Commands', () => {
|
describe('Slash Commands', () => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user