Fossil SCM

chat: when loading older messages, return scroll point to the position it was at when load was started, per chat room request.

stephan 2020-12-28 08:59 trunk
Commit 49cc6f28e81998f2f1af3072f1e7122bbd6e893601e11b1e3b6159c11b1a20d8
1 file changed +5
--- src/chat.js
+++ src/chat.js
@@ -946,10 +946,12 @@
946946
const loadOldMessages = function(n){
947947
Chat.ajaxStart();
948948
Chat.e.messagesWrapper.classList.add('loading');
949949
Chat.isBatchLoading = true;
950950
var gotMessages = false;
951
+ const scrollHt = Chat.e.messagesWrapper.scrollHeight,
952
+ scrollTop = Chat.e.messagesWrapper.scrollTop;
951953
fetch("chat-poll?before="+Chat.mnMsg+"&n="+n)
952954
.then(x=>x.json())
953955
.then(function(x){
954956
gotMessages = x.msgs.length;
955957
newcontent(x,true);
@@ -973,10 +975,13 @@
973975
if(ndx>=0) Chat.disableDuringAjax.splice(ndx,1);
974976
Chat.e.loadOlderToolbar.disabled = true;
975977
}
976978
if(gotMessages > 0){
977979
F.toast.message("Loaded "+gotMessages+" older messages.");
980
+ Chat.e.messagesWrapper.scrollTo(
981
+ 0, Chat.e.messagesWrapper.scrollHeight - scrollHt + scrollTop
982
+ );
978983
}
979984
Chat.ajaxEnd();
980985
});
981986
};
982987
const wrapper = D.div(); /* browsers don't all properly handle >1 child in a fieldset */;
983988
--- src/chat.js
+++ src/chat.js
@@ -946,10 +946,12 @@
946 const loadOldMessages = function(n){
947 Chat.ajaxStart();
948 Chat.e.messagesWrapper.classList.add('loading');
949 Chat.isBatchLoading = true;
950 var gotMessages = false;
 
 
951 fetch("chat-poll?before="+Chat.mnMsg+"&n="+n)
952 .then(x=>x.json())
953 .then(function(x){
954 gotMessages = x.msgs.length;
955 newcontent(x,true);
@@ -973,10 +975,13 @@
973 if(ndx>=0) Chat.disableDuringAjax.splice(ndx,1);
974 Chat.e.loadOlderToolbar.disabled = true;
975 }
976 if(gotMessages > 0){
977 F.toast.message("Loaded "+gotMessages+" older messages.");
 
 
 
978 }
979 Chat.ajaxEnd();
980 });
981 };
982 const wrapper = D.div(); /* browsers don't all properly handle >1 child in a fieldset */;
983
--- src/chat.js
+++ src/chat.js
@@ -946,10 +946,12 @@
946 const loadOldMessages = function(n){
947 Chat.ajaxStart();
948 Chat.e.messagesWrapper.classList.add('loading');
949 Chat.isBatchLoading = true;
950 var gotMessages = false;
951 const scrollHt = Chat.e.messagesWrapper.scrollHeight,
952 scrollTop = Chat.e.messagesWrapper.scrollTop;
953 fetch("chat-poll?before="+Chat.mnMsg+"&n="+n)
954 .then(x=>x.json())
955 .then(function(x){
956 gotMessages = x.msgs.length;
957 newcontent(x,true);
@@ -973,10 +975,13 @@
975 if(ndx>=0) Chat.disableDuringAjax.splice(ndx,1);
976 Chat.e.loadOlderToolbar.disabled = true;
977 }
978 if(gotMessages > 0){
979 F.toast.message("Loaded "+gotMessages+" older messages.");
980 Chat.e.messagesWrapper.scrollTo(
981 0, Chat.e.messagesWrapper.scrollHeight - scrollHt + scrollTop
982 );
983 }
984 Chat.ajaxEnd();
985 });
986 };
987 const wrapper = D.div(); /* browsers don't all properly handle >1 child in a fieldset */;
988

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button