fulltext-search-ui.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. window.SearcherDisplay = (function($) {
  2. /**
  3. * This class provides support for displaying quick search text results to users.
  4. */
  5. function SearcherDisplay() { }
  6. SearcherDisplay.prototype.init = function() {
  7. this._displayQuickSearch();
  8. };
  9. /**
  10. * This method creates the quick text search entry in navigation menu and wires all required events.
  11. */
  12. SearcherDisplay.prototype._displayQuickSearch = function() {
  13. var quickSearch = $(document.createElement("iframe")),
  14. body = $("body"),
  15. self = this;
  16. quickSearch.attr("src", "quicksearch.html");
  17. quickSearch.css("width", "0px");
  18. quickSearch.css("height", "0px");
  19. body.append(quickSearch);
  20. $(window).on("message", function(msg) {
  21. var msgData = msg.originalEvent.data;
  22. if (msgData.msgid != "docstrap.quicksearch.done") {
  23. return;
  24. }
  25. var results = msgData.results || [];
  26. self._displaySearchResults(results);
  27. });
  28. function startSearch() {
  29. var searchTerms = $('#search-input').prop("value");
  30. if (searchTerms) {
  31. quickSearch[0].contentWindow.postMessage({
  32. "searchTerms": searchTerms,
  33. "msgid": "docstrap.quicksearch.start"
  34. }, "*");
  35. }
  36. }
  37. $('#search-input').on('keyup', function(evt) {
  38. if (evt.keyCode != 13) {
  39. return;
  40. }
  41. startSearch();
  42. return false;
  43. });
  44. $('#search-submit').on('click', function() {
  45. startSearch();
  46. return false;
  47. });
  48. };
  49. /**
  50. * This method displays the quick text search results in a modal dialog.
  51. */
  52. SearcherDisplay.prototype._displaySearchResults = function(results) {
  53. var resultsHolder = $($("#searchResults").find(".modal-body")),
  54. fragment = document.createDocumentFragment(),
  55. resultsList = document.createElement("ul");
  56. resultsHolder.empty();
  57. for (var idx = 0; idx < results.length; idx++) {
  58. var result = results[idx],
  59. item = document.createElement("li"),
  60. link = document.createElement("a");
  61. link.href = result.id;
  62. link.innerHTML = result.title;
  63. item.appendChild(link)
  64. resultsList.appendChild(item);
  65. }
  66. fragment.appendChild(resultsList);
  67. resultsHolder.append(fragment);
  68. $("#searchResults").modal({"show": true});
  69. };
  70. return new SearcherDisplay();
  71. })($);