ComunicWeb/assets/js/pages/groups/sections/posts.js
2018-07-20 14:27:49 +02:00

145 lines
3.3 KiB
JavaScript

/**
* Groups posts section
*
* @author Pierre HUBERT
*/
ComunicWeb.pages.groups.sections.posts = {
/**
* ID of the oldest known post
*/
_oldest_post_id: 0,
/**
* Loading message
*/
_loading_msg: null,
/**
* Load post lock
*/
_load_post_locked: false,
/**
* Display the section
*
* @param {Object} info Information about the related group
* @param {HTMLElement} target The target for the section
*/
display: function(info, target){
//Reset posts counter
this._oldest_post_id = 0;
this._load_post_locked = true;
//Create posts target
var postsBody = createElem2({
appendTo: target,
type: "div",
class: "box box-primary box-group-posts"
});
var postsBody = createElem2({
appendTo: postsBody,
type: "div",
class: "box-body"
});
//Display loading message
this._loading_msg = ComunicWeb.common.messages.createCalloutElem(
"Loading", "Please wait while we load this group posts...", "info");
postsBody.appendChild(this._loading_msg);
//Refresh the list of posts
this._refresh_list(info, postsBody);
//Detect user scroll
$(window).scroll(function(){
//Cancel event if it came by error
if(!postsBody.isConnected)
return;
//Cancel event if the page is locked
if(ComunicWeb.pages.groups.sections.posts._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.groups.sections.posts._load_post_locked = true;
//Load next posts
ComunicWeb.pages.groups.sections.posts._refresh_list(info, postsBody);
});
},
/**
* Refresh the list of posts of this group
*
* @param {Object} info Information about the group
* @param {HTMLElement} target
*/
_refresh_list: function(info, target){
//Get the posts of the group
ComunicWeb.components.posts.interface.get_group(info.id,
ComunicWeb.pages.groups.sections.posts._oldest_post_id, function(result){
ComunicWeb.pages.groups.sections.posts._loading_msg.remove();
//Check for errors
if(result.error){
target.appendChild(ComunicWeb.common.messages.createCalloutElem(
"Error", "Could not get this group posts!", "danger"));
return;
}
//Display the list of posts
ComunicWeb.pages.groups.sections.posts._display_list(result, target);
});
},
/**
* Display a list of posts
*
* @param {Array} list The list of posts
* @param {HTMLElement} target The target for the list
*/
_display_list: function(list, target){
var oldest_id = 0;
list.forEach(function(post){
if(oldest_id == 0 || post.ID < oldest_id)
oldest_id = post.ID;
//Display the post
ComunicWeb.components.posts.ui.display_post(post, target);
});
if(this._oldest_post_id == 0 && oldest_id == 0){
//Display message
var message = ComunicWeb.common.messages.createCalloutElem("No post to display", "This group has not sent any post yet.", "info");
message.className += " noGroupPosts";
target.appendChild(message);
}
if(this._oldest_post_id == 0 || this._oldest_post_id > oldest_id)
this._oldest_post_id = oldest_id;
//Unlock posts loading (only if we received more than one post)
if(list.length > 0)
this._load_post_locked = false;
},
};