search.js 1.6 KB

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