mirror of
https://github.com/pierre42100/ComunicWeb
synced 2025-06-19 04:15:17 +00:00
Upgraded search form component structure.
This commit is contained in:
167
assets/js/components/search/form.js
Normal file
167
assets/js/components/search/form.js
Normal file
@ -0,0 +1,167 @@
|
||||
/**
|
||||
* Search form component
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
ComunicWeb.components.search.form = {
|
||||
|
||||
/**
|
||||
* Store the text input area
|
||||
*/
|
||||
_textInput: null,
|
||||
|
||||
/**
|
||||
* Initializate a search form element
|
||||
*
|
||||
* @param {HTMLElement} textInput The text input node
|
||||
* @param {HTMLElement} searchResultBox The target of the results
|
||||
* @return {Boolean} True for a success
|
||||
*/
|
||||
init: function(textInput, searchResultBox){
|
||||
//Log action
|
||||
ComunicWeb.debug.logMessage("Initializate search menu");
|
||||
|
||||
//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);
|
||||
}
|
||||
|
||||
//Cache textinput area
|
||||
this._textInput = textInput;
|
||||
|
||||
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
|
||||
apiURI = "search/user";
|
||||
params = {
|
||||
query: textInput.value,
|
||||
};
|
||||
ComunicWeb.common.api.makeAPIrequest(apiURI, params, true, function(response){
|
||||
|
||||
//Continue only in case of success
|
||||
if(response.error)
|
||||
return false;
|
||||
|
||||
//Preload users informations
|
||||
ComunicWeb.user.userInfos.getMultipleUsersInfos(response, function(usersInfos){
|
||||
|
||||
//Remove any remainging element in searchResultBox
|
||||
emptyElem(searchBoxContainer);
|
||||
|
||||
//Create menu list
|
||||
var menuList = createElem("ul", searchBoxContainer);
|
||||
menuList.className = "menu";
|
||||
|
||||
//Process each result
|
||||
for(i in response){
|
||||
|
||||
//Retrieve userID
|
||||
var userID = response[i];
|
||||
|
||||
//We show user only if we have informations about him
|
||||
if(usersInfos["user-"+userID])
|
||||
//Display user informations
|
||||
ComunicWeb.components.search.form.displayUser(usersInfos["user-"+userID], menuList);
|
||||
|
||||
}
|
||||
|
||||
//Enable slimscroll
|
||||
$(menuList).slimScroll({
|
||||
height: '100%'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Display a user on the result list
|
||||
*
|
||||
* @param {Integer} userInfos Informations about the user
|
||||
* @param {HTMLElement} menuList The target list menu
|
||||
* @return {Boolean} True for a success
|
||||
*/
|
||||
displayUser: function(userInfos, menuList){
|
||||
//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...";
|
||||
|
||||
//Apply user informations
|
||||
userImage.src = userInfos.accountImage;
|
||||
usernameElem.innerHTML = userInfos.firstName + " " + userInfos.lastName;
|
||||
|
||||
//Make user link element live
|
||||
userLinkElement.onclick = function() {
|
||||
ComunicWeb.components.search.form.close();
|
||||
openUserPage(userInfos);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Close and clear the search form
|
||||
*/
|
||||
close: function(){
|
||||
this._textInput.value = "";
|
||||
this._textInput.onkeyup();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user