mirror of
				https://github.com/pierre42100/ComunicWeb
				synced 2025-10-31 10:14:51 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * 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"));
 | |
| 			ComunicWeb.components.search.form.close();
 | |
| 		}
 | |
| 
 | |
| 		//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
 | |
| 		ComunicWeb.components.search.interface.global(textInput.value, function(results){
 | |
| 			
 | |
| 			//Continue only in case of success
 | |
| 			if(results.error)
 | |
| 				return false;
 | |
| 			
 | |
| 			//Get information about related groups and users
 | |
| 			getMultipleUsersInfo(ComunicWeb.components.search.utils.getUsersId(results), function(usersInfo){
 | |
| 
 | |
| 				//Check for errors
 | |
| 				if(usersInfo.error)
 | |
| 					return;
 | |
| 				
 | |
| 				getInfoMultipleGroups(ComunicWeb.components.search.utils.getGroupsId(results), function(groupsInfo){
 | |
| 
 | |
| 					//Remove any remainging element in searchResultBox
 | |
| 					emptyElem(searchBoxContainer);
 | |
| 
 | |
| 					//Create menu list
 | |
| 					var menuList = createElem("ul", searchBoxContainer);
 | |
| 					menuList.className = "menu";
 | |
| 
 | |
| 					if(groupsInfo.error)
 | |
| 						return;
 | |
| 
 | |
| 					//Process the list of results
 | |
| 					results.forEach(function(result){
 | |
| 						ComunicWeb.components.search.ui.display(result, usersInfo, groupsInfo, function(){
 | |
| 							ComunicWeb.components.search.form.close();
 | |
| 						}, menuList);
 | |
| 					});
 | |
| 
 | |
| 					//Enable slimscroll
 | |
| 					$(menuList).slimScroll({
 | |
| 						height: '100%'
 | |
| 					});
 | |
| 				});
 | |
| 
 | |
| 			});
 | |
| 			
 | |
| 		});
 | |
| 		
 | |
| 	},
 | |
| 
 | |
| 	/**
 | |
| 	 * Close and clear the search form
 | |
| 	 */
 | |
| 	close: function(){
 | |
| 		this._textInput.value = "";
 | |
| 		this._textInput.onkeyup();
 | |
| 	}
 | |
| } |