thelounge/client/js/socket-events/more.js

57 lines
1.9 KiB
JavaScript
Raw Normal View History

2017-05-18 20:08:54 +00:00
"use strict";
const $ = require("jquery");
const socket = require("../socket");
const render = require("../render");
const chat = $("#chat");
socket.on("more", function(data) {
let chan = chat.find("#chan-" + data.chan);
const type = chan.data("type");
chan = chan.find(".messages");
2017-05-18 20:08:54 +00:00
// get the scrollable wrapper around messages
const scrollable = chan.closest(".chat");
const heightOld = chan.height() - scrollable.scrollTop();
2017-05-18 20:08:54 +00:00
// If there are no more messages to show, just hide the button and do nothing else
if (!data.messages.length) {
scrollable.find(".show-more").removeClass("show");
return;
}
2017-05-18 20:08:54 +00:00
// Remove the date-change marker we put at the top, because it may
// not actually be a date change now
const children = $(chan).children();
if (children.eq(0).hasClass("date-marker-container")) { // Check top most child
children.eq(0).remove();
} else if (children.eq(1).hasClass("date-marker-container")) {
// The unread-marker could be at index 0, which will cause the date-marker to become "stuck"
children.eq(1).remove();
2017-06-22 20:08:36 +00:00
} else if (children.eq(0).hasClass("condensed") && children.eq(0).children(".date-marker-container").eq(0).hasClass("date-marker-container")) {
children.eq(0).children(".date-marker-container").eq(0).remove();
2017-05-18 20:08:54 +00:00
}
// Add the older messages
const documentFragment = render.buildChannelMessages(data.chan, type, data.messages);
2017-05-18 20:08:54 +00:00
chan.prepend(documentFragment).end();
// restore scroll position
const position = chan.height() - heightOld;
2017-07-10 16:16:20 +00:00
scrollable.finish().scrollTop(position);
// We have to do this hack due to smooth scrolling in browsers,
// as scrollTop does not apply correctly
if (window.requestAnimationFrame) {
window.requestAnimationFrame(() => scrollable.scrollTop(position));
}
2017-05-18 20:08:54 +00:00
if (data.messages.length !== 100) {
scrollable.find(".show-more").removeClass("show");
}
scrollable.find(".show-more-button")
.text("Show older messages")
.prop("disabled", false);
2017-05-18 20:08:54 +00:00
});