search.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. "use strict";
  2. jQuery( document ).ready(function( $ ) {
  3. if($('#search-input').length) {
  4. $('#search-input').focus();
  5. $('.searchresults').css('display', 'block');
  6. var vueHeader = new Vue({
  7. el: '#header-container',
  8. data: {
  9. searchq: '',
  10. searchres: [],
  11. searchsuggest: [],
  12. searchload: 0,
  13. searchactive: false,
  14. searchmoveidx: 0,
  15. searchmovekey: '',
  16. searchmovearr: []
  17. },
  18. watch: {
  19. searchq: (val, oldVal) => {
  20. vueHeader.searchmoveidx = 0;
  21. if(val.length >= 3) {
  22. vueHeader.searchactive = true;
  23. vueHeader.searchload++;
  24. socket.emit('search', { terms: val }, (data) => {
  25. vueHeader.searchres = data.match;
  26. vueHeader.searchsuggest = data.suggest;
  27. vueHeader.searchmovearr = _.concat([], vueHeader.searchres, vueHeader.searchsuggest);
  28. if(vueHeader.searchload > 0) { vueHeader.searchload--; }
  29. });
  30. } else {
  31. vueHeader.searchactive = false;
  32. vueHeader.searchres = [];
  33. vueHeader.searchsuggest = [];
  34. vueHeader.searchmovearr = [];
  35. vueHeader.searchload = 0;
  36. }
  37. },
  38. searchmoveidx: (val, oldVal) => {
  39. if(val > 0) {
  40. vueHeader.searchmovekey = (vueHeader.searchmovearr[val - 1]) ?
  41. 'res.' + vueHeader.searchmovearr[val - 1]._id :
  42. 'sug.' + vueHeader.searchmovearr[val - 1];
  43. } else {
  44. vueHeader.searchmovekey = '';
  45. }
  46. }
  47. },
  48. methods: {
  49. useSuggestion: (sug) => {
  50. vueHeader.searchq = sug;
  51. },
  52. closeSearch: () => {
  53. vueHeader.searchq = '';
  54. },
  55. moveSelectSearch: () => {
  56. if(vueHeader.searchmoveidx < 1) { return; }
  57. let i = vueHeader.searchmoveidx - 1;
  58. if(vueHeader.searchmovearr[i]) {
  59. window.location.assign('/' + vueHeader.searchmovearr[i]._id);
  60. } else {
  61. vueHeader.searchq = vueHeader.searchmovearr[i];
  62. }
  63. },
  64. moveDownSearch: () => {
  65. if(vueHeader.searchmoveidx < vueHeader.searchmovearr.length) {
  66. vueHeader.searchmoveidx++;
  67. }
  68. },
  69. moveUpSearch: () => {
  70. if(vueHeader.searchmoveidx > 0) {
  71. vueHeader.searchmoveidx--;
  72. }
  73. }
  74. }
  75. });
  76. $('main').on('click', vueHeader.closeSearch);
  77. }
  78. });