ComunicWeb/assets/js/components/like/button.js
2017-12-29 09:58:40 +01:00

102 lines
1.9 KiB
JavaScript

/**
* Like button
*
* @author Pierre HUBERT
*/
ComunicWeb.components.like.button = {
/**
* Display like button
*
* @param {String} kind The kind of like component
* @param {int} id The ID of the component
* @param {int} count The current number of likes
* @param {Boolean} liking Specify wether user is liking the content or not
* @param {HTMLElement} target The target for the button
*/
display: function(kind, id, count, liking, target){
//Empty target
emptyElem(target);
//Display like button
var likeRoot = createElem2({
type: "div",
appendTo: target,
});
var likeLink = createElem2({
appendTo: likeRoot,
type: "a",
class: "link-black text-sm"
});
createElem2({
appendTo: likeLink,
type: "i",
class: "fa fa-thumbs-o-up margin-r-5"
});
var likeMsg = createElem2({
appendTo: likeLink,
type: "span",
});
//Check if user can like or not the component
if(!signed_in()){
//Remove link effect
likeLink.style.cursor = "default";
if(count == 0){
//Hide like component
likeRoot.style.visibility = "hidden";
}
else {
//Update message
if(count == 1){
likeMsg.innerHTML = "1 like";
}
else
likeMsg.innerHTML = count + " likes";
}
}
else {
//Update the message
if(liking == true){
likeMsg.innerHTML = "Liking"
}
else {
likeMsg.innerHTML = "Like";
}
//Add total count if possible
if(count > 0)
likeMsg.innerHTML += " (" + count + ")";
//Set onclick behaviour
likeLink.onclick = function(){
//Get the new status
var newliking = liking == true ? false : true;
count = newliking ? count + 1 : count - 1;
//Update liking status on the API
ComunicWeb.components.like.interface.update(kind, id, newliking);
//Display liking element again
ComunicWeb.components.like.button.display(kind, id, count, newliking, target);
}
}
},
};