Can load older latest posts.

This commit is contained in:
Pierre
2018-02-03 18:21:26 +01:00
parent 999d3248a5
commit 83fe4b9b8b
2 changed files with 90 additions and 31 deletions

View File

@ -6,6 +6,16 @@
ComunicWeb.pages.latestPosts.main = {
/**
* Last loaded post id
*/
_last_post_id: 0,
/**
* Specify if post loading is locked or not
*/
_load_post_locked: false,
/**
* Open latest posts page
*
@ -14,33 +24,9 @@ ComunicWeb.pages.latestPosts.main = {
*/
open: function(params, target){
//Perform a request on the server to get the list of latest posts
ComunicWeb.components.posts.interface.get_latest(function(response){
//Check for errors - display a modal
if(response.error){
//Display modal error
var error = ComunicWeb.common.messages.createCalloutElem("Error", "Could not get the list of the latest posts ! Please try to refresh the page...", "danger");
error.className += " latestPostsError";
target.appendChild(error);
return;
}
//Display the list of posts
ComunicWeb.pages.latestPosts.main._display_list(response, target);
});
},
/**
* Display the list of latest post
*
* @param {Object} list The list of posts to display
* @param {HTMLElement} target The target for the posts
*/
_display_list: function(list, target){
//Reset variables
this._last_post_id = 0;
this._load_post_locked = true;
//Create post list box
//Create row
@ -71,10 +57,77 @@ ComunicWeb.pages.latestPosts.main = {
class: "box-body"
});
//Load the list
this._load_list(boxBody);
//Catch scroll event
$(window).scroll(function(){
//Cancel event if it came by error
if(!boxBody.isConnected)
return;
//Cancel event if the page is locked
if(ComunicWeb.pages.latestPosts.main._load_post_locked !== false)
return;
//Check if we reached the bottom of the page
if($(window).scrollTop() + $(window).height() < $(document).height() - 50){
return;
}
//Lock the loading state
ComunicWeb.pages.latestPosts.main._load_post_locked = true;
//Load next posts
ComunicWeb.pages.latestPosts.main._load_list(boxBody);
});
},
/**
* Load the list of post
*
* @param {HTMLElement} target The target
*/
_load_list: function(target){
//Perform a request on the server to get the list of latest posts
ComunicWeb.components.posts.interface.get_latest(this._last_post_id, function(response){
//Check for errors - display a modal
if(response.error){
//Display modal error
var error = ComunicWeb.common.messages.createCalloutElem("Error", "Could not get the list of the latest posts ! Please try to refresh the page...", "danger");
error.className += " latestPostsError";
target.appendChild(error);
}
else
//Display the list of posts
ComunicWeb.pages.latestPosts.main._display_list(response, target);
//Unlock posts loading
ComunicWeb.pages.latestPosts.main._load_post_locked = false;
});
},
/**
* Display the list of latest post
*
* @param {Object} list The list of posts to display
* @param {HTMLElement} target The target for the posts
*/
_display_list: function(list, target){
//Process the list of posts
for (let index = 0; index < list.length; index++) {
//Display the post
ComunicWeb.components.posts.ui.display_post(list[index], boxBody);
ComunicWeb.components.posts.ui.display_post(list[index], target);
//Save its ID
this._last_post_id = list[index].ID;
}
//Check if there aren't any post to display