mirror of
https://github.com/pierre42100/ComunicWeb
synced 2024-11-22 20:19:21 +00:00
Can load older messages on conversations page
This commit is contained in:
parent
bf00a52430
commit
4a20815619
@ -7,6 +7,7 @@
|
|||||||
.big-box-conversation .direct-chat-text {
|
.big-box-conversation .direct-chat-text {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
|
max-width: 150px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.big-box-conversation .right .direct-chat-text {
|
.big-box-conversation .right .direct-chat-text {
|
||||||
|
@ -42,6 +42,9 @@ ComunicWeb.pages.conversations.conversation = {
|
|||||||
//Conversation information
|
//Conversation information
|
||||||
conversation: null,
|
conversation: null,
|
||||||
|
|
||||||
|
//Enabled top scroll detection
|
||||||
|
initTopScrollDetection: false,
|
||||||
|
|
||||||
//Related user information
|
//Related user information
|
||||||
users: null,
|
users: null,
|
||||||
};
|
};
|
||||||
@ -186,6 +189,9 @@ ComunicWeb.pages.conversations.conversation = {
|
|||||||
ComunicWeb.pages.conversations.conversation.addMessage(message);
|
ComunicWeb.pages.conversations.conversation.addMessage(message);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Init top scroll detection (if available)
|
||||||
|
ComunicWeb.pages.conversations.conversation.initTopScrollDetection();
|
||||||
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -221,11 +227,20 @@ ComunicWeb.pages.conversations.conversation = {
|
|||||||
|
|
||||||
//Create message container
|
//Create message container
|
||||||
var messageContainer = createElem2({
|
var messageContainer = createElem2({
|
||||||
appendTo: this._conv_info.window.messagesTarget,
|
|
||||||
type: "div",
|
type: "div",
|
||||||
class: "direct-chat-msg " + (userIsOwner ? "right" : "")
|
class: "direct-chat-msg " + (userIsOwner ? "right" : "")
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Apply message container
|
||||||
|
if(toLatestMessages){
|
||||||
|
this._conv_info.window.messagesTarget.appendChild(messageContainer);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
//Put the message in the begining
|
||||||
|
this._conv_info.window.messagesTarget.insertBefore(messageContainer, this._conv_info.window.messagesTarget.firstChild);
|
||||||
|
}
|
||||||
|
|
||||||
//Top message information
|
//Top message information
|
||||||
var topInformation = createElem2({
|
var topInformation = createElem2({
|
||||||
appendTo: messageContainer,
|
appendTo: messageContainer,
|
||||||
@ -308,17 +323,19 @@ ComunicWeb.pages.conversations.conversation = {
|
|||||||
nameContainer.innerHTML = userFullName(this._conv_info.users["user-" + info.ID_user]);
|
nameContainer.innerHTML = userFullName(this._conv_info.users["user-" + info.ID_user]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Set a timeout to make slimscroll properly work
|
//Set a timeout to make slimscroll properly work (for newest messages)
|
||||||
setTimeout(function(){
|
if(toLatestMessages){
|
||||||
|
setTimeout(function(){
|
||||||
|
|
||||||
//Enable / update slimscroll
|
//Enable / update slimscroll
|
||||||
var target = ComunicWeb.pages.conversations.conversation._conv_info.window.messagesTarget;
|
var target = ComunicWeb.pages.conversations.conversation._conv_info.window.messagesTarget;
|
||||||
var scrollBottom = $(target).prop("scrollHeight")+"px";
|
var scrollBottom = $(target).prop("scrollHeight")+"px";
|
||||||
$(target).slimScroll({
|
$(target).slimScroll({
|
||||||
scrollTo: scrollBottom
|
scrollTo: scrollBottom
|
||||||
});
|
});
|
||||||
|
|
||||||
}, 100);
|
}, 100);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -478,6 +495,93 @@ ComunicWeb.pages.conversations.conversation = {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init top scroll detection (if required)
|
||||||
|
*/
|
||||||
|
initTopScrollDetection: function(){
|
||||||
|
|
||||||
|
//Check if top scroll dection has already been enabled on this conversation
|
||||||
|
if(this._conv_info.initTopScrollDetection)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Check if there isn't any message in the list
|
||||||
|
if(this._conv_info.last_message_id == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Mark top scroll detection as initialized
|
||||||
|
this._conv_info.initTopScrollDetection = true;
|
||||||
|
|
||||||
|
//Define some variables
|
||||||
|
var refreshLocked = false;
|
||||||
|
var topScrollCount = 0;
|
||||||
|
|
||||||
|
//Save conversation information
|
||||||
|
var convInfo = this._conv_info;
|
||||||
|
|
||||||
|
$(this._conv_info.window.messagesTarget).bind("slimscrolling", function(e, pos){
|
||||||
|
|
||||||
|
//Check if a request is already pending
|
||||||
|
if(refreshLocked)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Check if we are not at the top of the screen
|
||||||
|
if(pos != 0){
|
||||||
|
topScrollCount = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Increment value
|
||||||
|
topScrollCount++;
|
||||||
|
|
||||||
|
//The user must scroll several seconds to request a refresh
|
||||||
|
if(topScrollCount < 3)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Lock refresh
|
||||||
|
refreshLocked = true;
|
||||||
|
|
||||||
|
//Query older messages
|
||||||
|
ComunicWeb.components.conversations.interface.getOlderMessages(convInfo.id, convInfo.first_message_id, 10, function(response){
|
||||||
|
|
||||||
|
//Unlock service
|
||||||
|
refreshLocked = false;
|
||||||
|
|
||||||
|
//Check for errors
|
||||||
|
if(response.error)
|
||||||
|
return notify("An error occured while trying to retrive older messages !", "danger");
|
||||||
|
|
||||||
|
//Check if there is not any message to display
|
||||||
|
if(response.length == 0){
|
||||||
|
|
||||||
|
//Lock service
|
||||||
|
refreshLocked = true;
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Process the list of messages
|
||||||
|
//Reverse messages order
|
||||||
|
response.reverse();
|
||||||
|
|
||||||
|
//Save the current oldest message
|
||||||
|
var oldestMessage = convInfo.window.messagesTarget.firstChild;
|
||||||
|
|
||||||
|
//Process the list of messages in reverse order
|
||||||
|
response.forEach(function(message){
|
||||||
|
ComunicWeb.pages.conversations.conversation.addMessage(message);
|
||||||
|
});
|
||||||
|
|
||||||
|
//Update slimscroll
|
||||||
|
newScrollPos = oldestMessage.offsetTop - 30;
|
||||||
|
if(newScrollPos < 0)
|
||||||
|
newScrollPos = 0;
|
||||||
|
$(convInfo.window.messagesTarget).slimScroll({
|
||||||
|
scrollTo: newScrollPos + "px"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user