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();
|
||
|
})($);
|