ComunicWeb/assets/js/pages/userPage/friendshipStatus.js
2017-12-23 17:46:55 +01:00

210 lines
5.0 KiB
JavaScript

/**
* Handle the update of the friendship status
*
* @author Pierre HUBERT
*/
ComunicWeb.pages.userPage.friendshipStatus = {
/**
* Display the friendship status
*
* @param {Integer} userID The ID of the target user
* @param {HTMLElement} target The target element
*/
display: function(userID, target){
//Get the current status of the friendship
ComunicWeb.components.friends.list.getStatus(userID, function(response){
//Empty the target area
emptyElem(target);
target.innerHTML = "";
//Check for errors
if(response.error){
message = ComunicWeb.common.messages.createCalloutElem("Error", "Couldn't load friendship informations !", "danger");
target.appendChild(message);
return;
}
//Check if the user has received a friendship request
if(response.received_request){
//Offer the user to reject a frienship request
var rejectRequest = createElem2({
appendTo: target,
type: "button",
class: "btn btn-xs btn-danger",
innerHTML: "Reject request"
});
createElem2({
appendTo: target,
type: "span",
innerHTML: " ",
})
//Offer the user to accept a frienship request
var acceptRequest = createElem2({
appendTo: target,
type: "button",
class: "btn btn-xs btn-success",
innerHTML: "Accept request"
});
//Prepare the buttons
acceptRequest.setAttribute("data-accept", "true");
rejectRequest.setAttribute("data-accept", "false");
//Setup the action
var respondRequest = function(){
//Lock the buttons
acceptRequest.disabled = true;
rejectRequest.disabled = true;
//Get the status of the request
var accept = this.getAttribute("data-accept") == "true";
//Perform the action
ComunicWeb.components.friends.list.respondRequest(userID, accept, function(response){
//Unlock the buttons
acceptRequest.disabled = false;
rejectRequest.disabled = false;
//Check for errors
if(response.error){
ComunicWeb.common.notificationSystem.showNotification("Couldn't update request status !",
"danger", 5);
}
else {
//Reopen user page
openUserPage(userID);
}
});
}
acceptRequest.onclick = respondRequest;
rejectRequest.onclick = respondRequest;
}
//Check if user has sent a friendship request
else if(response.sent_request){
//Offer the user to cancel a frienship request
var cancelRequest = createElem2({
appendTo: target,
type: "button",
class: "btn btn-xs btn-danger",
innerHTML: "Cancel request"
});
cancelRequest.onclick = function(){
//Lock button
this.disabled = true;
//Send the request
ComunicWeb.components.friends.list.removeRequest(userID, function(response){
//Check for errors
if(response.error){
ComunicWeb.common.notificationSystem.showNotification("An error occured while trying to remove the request !");
}
//Reload this component
ComunicWeb.pages.userPage.friendshipStatus.display(userID, target);
});
}
}
//Display send request message
else if(response.are_friend == false) {
//Offer the user to send a frienship request
var sendRequestButton = createElem2({
appendTo: target,
type: "button",
class: "btn btn-xs btn-primary",
innerHTML: "Send request"
});
sendRequestButton.onclick = function(){
//Lock button
this.disabled = true;
//Send the request
ComunicWeb.components.friends.list.sendRequest(userID, function(response){
//Check for errors
if(response.error){
ComunicWeb.common.notificationSystem.showNotification("An error occured while trying to send the request !");
}
//Reload this component
ComunicWeb.pages.userPage.friendshipStatus.display(userID, target);
});
}
}
//Offer user to follow other user
else {
//Setup button
var followButton = createElem2({
appendTo: target,
type: "button",
class: "btn btn-primary btn-block",
});
if(response.following){
followButton.innerHTML = "Following";
followButton.setAttribute("data-following", "true");
}
else {
followButton.innerHTML = "Follow";
followButton.setAttribute("data-following", "false");
}
//Make the follow button live
followButton.onclick = function(){
//Lock button
this.disabled = true;
//Check if the user has to be followed or not (reverse current state)
var follow = this.getAttribute("data-following") == "false";
ComunicWeb.components.friends.list.setFollowing(userID, follow, function(response){
//Check for errors
if(response.error){
ComunicWeb.common.notificationSystem.showNotification("An error occured while trying to update following status !");
}
//Reload this component
ComunicWeb.pages.userPage.friendshipStatus.display(userID, target);
});
}
}
});
}
}