Merge condensed messages when loading more history
This commit is contained in:
parent
db53f13865
commit
1bdbb75d4c
@ -1,21 +1,29 @@
|
||||
"use strict";
|
||||
|
||||
const _ = require("lodash");
|
||||
const constants = require("./constants");
|
||||
const templates = require("../views");
|
||||
|
||||
module.exports = {
|
||||
updateText,
|
||||
getStoredTypes,
|
||||
};
|
||||
|
||||
function updateText(condensed, addedTypes) {
|
||||
function getStoredTypes(condensed) {
|
||||
const obj = {};
|
||||
|
||||
constants.condensedTypes.forEach((type) => {
|
||||
obj[type] = condensed.data(type) || 0;
|
||||
});
|
||||
|
||||
addedTypes.forEach((type) => {
|
||||
obj[type]++;
|
||||
return obj;
|
||||
}
|
||||
|
||||
function updateText(condensed, addedTypes) {
|
||||
const obj = getStoredTypes(condensed);
|
||||
|
||||
_.forOwn(addedTypes, (count, type) => {
|
||||
obj[type] += count;
|
||||
condensed.data(type, obj[type]);
|
||||
});
|
||||
|
||||
|
@ -61,18 +61,21 @@ function appendMessage(container, chanId, chanType, msg) {
|
||||
return;
|
||||
}
|
||||
|
||||
const obj = {};
|
||||
obj[msg.type] = 1;
|
||||
|
||||
// If the previous message is already condensed,
|
||||
// we just append to it and update text
|
||||
if (lastChild.hasClass("condensed")) {
|
||||
lastChild.append(renderedMessage);
|
||||
condensed.updateText(lastChild, [msg.type]);
|
||||
condensed.updateText(lastChild, obj);
|
||||
return;
|
||||
}
|
||||
|
||||
// Always create a condensed container
|
||||
const newCondensed = $(templates.msg_condensed({time: msg.time}));
|
||||
|
||||
condensed.updateText(newCondensed, [msg.type]);
|
||||
condensed.updateText(newCondensed, obj);
|
||||
newCondensed.append(renderedMessage);
|
||||
container.append(newCondensed);
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
const $ = require("jquery");
|
||||
const socket = require("../socket");
|
||||
const render = require("../render");
|
||||
const condensed = require("../condensed");
|
||||
const chat = $("#chat");
|
||||
|
||||
socket.on("more", function(data) {
|
||||
@ -58,6 +59,21 @@ socket.on("more", function(data) {
|
||||
}
|
||||
}
|
||||
|
||||
// Join duplicate condensed messages together
|
||||
const condensedDuplicate = chan.find(".msg.condensed + .msg.condensed");
|
||||
|
||||
if (condensedDuplicate) {
|
||||
const condensedCorrect = condensedDuplicate.prev();
|
||||
|
||||
condensed.updateText(condensedCorrect, condensed.getStoredTypes(condensedDuplicate));
|
||||
|
||||
condensedCorrect
|
||||
.append(condensedDuplicate.find(".msg"))
|
||||
.toggleClass("closed", condensedDuplicate.hasClass("closed"));
|
||||
|
||||
condensedDuplicate.remove();
|
||||
}
|
||||
|
||||
// restore scroll position
|
||||
const position = chan.height() - heightOld;
|
||||
scrollable.finish().scrollTop(position);
|
||||
|
Loading…
Reference in New Issue
Block a user