1 | window.SearcherDisplay = (function($) {
|
2 | |
3 |
|
4 |
|
5 | function SearcherDisplay() { }
|
6 |
|
7 | SearcherDisplay.prototype.init = function() {
|
8 | this._displayQuickSearch();
|
9 | };
|
10 |
|
11 | |
12 |
|
13 |
|
14 | SearcherDisplay.prototype._displayQuickSearch = function() {
|
15 | var quickSearch = $(document.createElement("iframe")),
|
16 | body = $("body"),
|
17 | self = this;
|
18 |
|
19 | quickSearch.attr("src", "quicksearch.html");
|
20 | quickSearch.css("width", "0px");
|
21 | quickSearch.css("height", "0px");
|
22 |
|
23 | body.append(quickSearch);
|
24 |
|
25 | $(window).on("message", function(msg) {
|
26 | var msgData = msg.originalEvent.data;
|
27 |
|
28 | if (msgData.msgid != "docstrap.quicksearch.done") {
|
29 | return;
|
30 | }
|
31 |
|
32 | var results = msgData.results || [];
|
33 |
|
34 | self._displaySearchResults(results);
|
35 | });
|
36 |
|
37 | function startSearch() {
|
38 | var searchTerms = $('#search-input').prop("value");
|
39 | if (searchTerms) {
|
40 | quickSearch[0].contentWindow.postMessage({
|
41 | "searchTerms": searchTerms,
|
42 | "msgid": "docstrap.quicksearch.start"
|
43 | }, "*");
|
44 | }
|
45 | }
|
46 |
|
47 | $('#search-input').on('keyup', function(evt) {
|
48 | if (evt.keyCode != 13) {
|
49 | return;
|
50 | }
|
51 | startSearch();
|
52 | return false;
|
53 | });
|
54 | $('#search-submit').on('click', function() {
|
55 | startSearch();
|
56 | return false;
|
57 | });
|
58 | };
|
59 |
|
60 | |
61 |
|
62 |
|
63 | SearcherDisplay.prototype._displaySearchResults = function(results) {
|
64 | var resultsHolder = $($("#searchResults").find(".modal-body")),
|
65 | fragment = document.createDocumentFragment(),
|
66 | resultsList = document.createElement("ul");
|
67 |
|
68 | resultsHolder.empty();
|
69 |
|
70 | for (var idx = 0; idx < results.length; idx++) {
|
71 | var result = results[idx],
|
72 | item = document.createElement("li"),
|
73 | link = document.createElement("a");
|
74 |
|
75 | link.href = result.id;
|
76 | link.innerHTML = result.title;
|
77 |
|
78 | item.appendChild(link)
|
79 | resultsList.appendChild(item);
|
80 | }
|
81 |
|
82 | fragment.appendChild(resultsList);
|
83 | resultsHolder.append(fragment);
|
84 |
|
85 | $("#searchResults").modal({"show": true});
|
86 | };
|
87 |
|
88 | return new SearcherDisplay();
|
89 | })($);
|