90 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			90 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | window.SearcherDisplay = (function($) { | ||
|  |     /** | ||
|  |      * This class provides support for displaying quick search text results to users. | ||
|  |      */ | ||
|  |     function SearcherDisplay() { } | ||
|  | 
 | ||
|  |     SearcherDisplay.prototype.init = function() { | ||
|  |         this._displayQuickSearch(); | ||
|  |     }; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * This method creates the quick text search entry in navigation menu and wires all required events. | ||
|  |      */ | ||
|  |     SearcherDisplay.prototype._displayQuickSearch = function() { | ||
|  |             var quickSearch = $(document.createElement("iframe")), | ||
|  |                    body = $("body"), | ||
|  |                    self = this; | ||
|  | 
 | ||
|  |             quickSearch.attr("src", "quicksearch.html"); | ||
|  |             quickSearch.css("width", "0px"); | ||
|  |             quickSearch.css("height", "0px"); | ||
|  | 
 | ||
|  |             body.append(quickSearch); | ||
|  | 
 | ||
|  |             $(window).on("message", function(msg) { | ||
|  |                 var msgData = msg.originalEvent.data; | ||
|  | 
 | ||
|  |                 if (msgData.msgid != "docstrap.quicksearch.done") { | ||
|  |                     return; | ||
|  |                 } | ||
|  | 
 | ||
|  |                 var results = msgData.results || []; | ||
|  | 
 | ||
|  |                 self._displaySearchResults(results); | ||
|  |             }); | ||
|  | 
 | ||
|  |             function startSearch() { | ||
|  |               var searchTerms = $('#search-input').prop("value"); | ||
|  |               if (searchTerms) { | ||
|  |                 quickSearch[0].contentWindow.postMessage({ | ||
|  |                   "searchTerms": searchTerms, | ||
|  |                   "msgid": "docstrap.quicksearch.start" | ||
|  |                 }, "*"); | ||
|  |               } | ||
|  |             } | ||
|  | 
 | ||
|  |             $('#search-input').on('keyup', function(evt) { | ||
|  |               if (evt.keyCode != 13) { | ||
|  |                 return; | ||
|  |               } | ||
|  |               startSearch(); | ||
|  |               return false; | ||
|  |             }); | ||
|  |             $('#search-submit').on('click', function() { | ||
|  |               startSearch(); | ||
|  |               return false; | ||
|  |             }); | ||
|  |     }; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * This method displays the quick text search results in a modal dialog. | ||
|  |      */ | ||
|  |     SearcherDisplay.prototype._displaySearchResults = function(results) { | ||
|  |             var resultsHolder = $($("#searchResults").find(".modal-body")), | ||
|  |                   fragment = document.createDocumentFragment(), | ||
|  |                   resultsList = document.createElement("ul"); | ||
|  | 
 | ||
|  |             resultsHolder.empty(); | ||
|  | 
 | ||
|  |             for (var idx = 0; idx < results.length; idx++) { | ||
|  |                 var result = results[idx], | ||
|  |                        item = document.createElement("li"), | ||
|  |                        link = document.createElement("a"); | ||
|  | 
 | ||
|  |                 link.href = result.id; | ||
|  |                 link.innerHTML = result.title; | ||
|  | 
 | ||
|  |                 item.appendChild(link) | ||
|  |                 resultsList.appendChild(item); | ||
|  |             } | ||
|  | 
 | ||
|  |             fragment.appendChild(resultsList); | ||
|  |             resultsHolder.append(fragment); | ||
|  | 
 | ||
|  |             $("#searchResults").modal({"show": true}); | ||
|  |     }; | ||
|  | 
 | ||
|  |     return new SearcherDisplay(); | ||
|  | })($); |