ComunicWeb/assets/js/components/search/form.js

167 lines
4.4 KiB
JavaScript
Raw Normal View History

2017-05-26 10:01:54 +00:00
/**
* Search form component
*
* @author Pierre HUBERT
*/
ComunicWeb.components.search.form = {
2018-01-02 18:07:18 +00:00
/**
* Store the text input area
*/
_textInput: null,
2017-05-26 10:01:54 +00:00
/**
* Initializate a search form element
*
2017-05-26 14:11:41 +00:00
* @param {HTMLElement} textInput The text input node
* @param {HTMLElement} searchResultBox The target of the results
* @return {Boolean} True for a success
2017-05-26 10:01:54 +00:00
*/
2017-05-26 14:11:41 +00:00
init: function(textInput, searchResultBox){
//Log action
ComunicWeb.debug.logMessage("Initializate search menu");
2017-05-26 10:01:54 +00:00
2017-05-26 14:11:41 +00:00
//Create header
var searchHeader = createElem("li", searchResultBox);
searchHeader.className = "header";
searchHeader.innerHTML = "Search results";
//Box core
var searchBoxCore = createElem("li", searchResultBox);
var searchBoxContainer = createElem("div", searchBoxCore);
searchBoxContainer.className = "searchBoxResultsContainer";
//Create footer
var searchFooter = createElem("li", searchResultBox);
searchFooter.className = "footer";
//Footer link
var footerLink = createElem("a", searchFooter);
footerLink.innerHTML = "See more results";
footerLink.onclick = function(){
openPage("search?q=" + this.getAttribute("data-searchValue"));
}
//Make input text lives
textInput.onkeyup = function(){
ComunicWeb.components.search.form.ontextchange(textInput, searchResultBox, searchBoxContainer, footerLink);
2017-05-26 14:11:41 +00:00
}
2018-01-02 18:07:18 +00:00
//Cache textinput area
this._textInput = textInput;
2017-05-26 14:11:41 +00:00
return true;
},
/**
* What to do on text change
*
* @param {HTMLElement} textInput The text input node
* @param {HTMLElement} searchResultBox The main search box
* @param {HTMLElement} searchBoxContainer The target of the results
* @param {HTMLElement} footerLink The footer element
* @return {Boolean} True for a success
*/
ontextchange: function(textInput, searchResultBox, searchBoxContainer, footerLink){
//We check if the text was removed
if(textInput.value == ""){
//Text was removed
//Hide box
searchResultBox.style.display = "none";
return true;
}
//We show the box
searchResultBox.style.display = "block";
//Change "see more result" value
footerLink.setAttribute("data-searchValue", textInput.value);
//Perform a request on the server
2018-01-01 14:45:03 +00:00
apiURI = "search/user";
params = {
query: textInput.value,
};
2017-05-27 09:57:05 +00:00
ComunicWeb.common.api.makeAPIrequest(apiURI, params, true, function(response){
//Continue only in case of success
if(response.error)
return false;
2017-05-27 13:11:30 +00:00
//Preload users informations
2017-05-27 13:35:10 +00:00
ComunicWeb.user.userInfos.getMultipleUsersInfos(response, function(usersInfos){
2017-05-27 09:57:05 +00:00
2017-05-27 13:11:30 +00:00
//Remove any remainging element in searchResultBox
emptyElem(searchBoxContainer);
//Create menu list
var menuList = createElem("ul", searchBoxContainer);
menuList.className = "menu";
2017-05-27 09:57:05 +00:00
2017-05-27 13:11:30 +00:00
//Process each result
for(i in response){
2017-05-27 09:57:05 +00:00
2017-05-27 13:11:30 +00:00
//Retrieve userID
var userID = response[i];
2017-05-27 13:35:10 +00:00
//We show user only if we have informations about him
if(usersInfos["user-"+userID])
2017-05-27 13:35:10 +00:00
//Display user informations
ComunicWeb.components.search.form.displayUser(usersInfos["user-"+userID], menuList);
2017-05-27 13:11:30 +00:00
}
//Enable slimscroll
$(menuList).slimScroll({
height: '100%'
2017-05-27 13:11:30 +00:00
});
2017-05-27 09:57:05 +00:00
});
});
2017-05-27 09:57:05 +00:00
},
/**
* Display a user on the result list
*
2017-05-27 13:35:10 +00:00
* @param {Integer} userInfos Informations about the user
2017-05-27 09:57:05 +00:00
* @param {HTMLElement} menuList The target list menu
* @return {Boolean} True for a success
*/
2017-05-27 13:35:10 +00:00
displayUser: function(userInfos, menuList){
2017-05-27 09:57:05 +00:00
//Create user element
var userListElement = createElem("li", menuList);
var userLinkElement = createElem("a", userListElement);
//User account image
var userAccountImageContainer = createElem("div", userLinkElement);
userAccountImageContainer.className = "pull-left";
var userImage = createElem("img", userAccountImageContainer);
userImage.className = "img-circle";
userImage.alt = "User image";
userImage.src = path_assets("img/defaultAvatar.png");
//User name
var usernameElem = createElem("h4", userLinkElement);
usernameElem.innerHTML = "Loading...";
2017-05-27 13:35:10 +00:00
//Apply user informations
userImage.src = userInfos.accountImage;
usernameElem.innerHTML = userInfos.firstName + " " + userInfos.lastName;
2018-01-02 18:07:18 +00:00
//Make user link element live
userLinkElement.onclick = function() {
ComunicWeb.components.search.form.close();
2018-07-14 12:18:21 +00:00
openUserPage(userInfos);
2018-01-02 18:07:18 +00:00
}
2017-05-26 14:11:41 +00:00
},
2018-01-02 18:07:18 +00:00
/**
* Close and clear the search form
*/
close: function(){
this._textInput.value = "";
this._textInput.onkeyup();
}
2017-05-26 10:01:54 +00:00
}