You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.3 KiB

  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. vueHeader.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. vueHeader.searchmovearr = _.concat([], vueHeader.searchres, vueHeader.searchsuggest);
  32. if(vueHeader.searchload > 0) { vueHeader.searchload--; }
  33. });
  34. } else {
  35. vueHeader.searchactive = false;
  36. vueHeader.searchres = [];
  37. vueHeader.searchsuggest = [];
  38. vueHeader.searchmovearr = [];
  39. vueHeader.searchload = 0;
  40. }
  41. },
  42. searchmoveidx: (val, oldVal) => {
  43. if(val > 0) {
  44. vueHeader.searchmovekey = (vueHeader.searchmovearr[val - 1].document) ?
  45. 'res.' + vueHeader.searchmovearr[val - 1].document.entryPath :
  46. 'sug.' + vueHeader.searchmovearr[val - 1];
  47. } else {
  48. vueHeader.searchmovekey = '';
  49. }
  50. }
  51. },
  52. methods: {
  53. useSuggestion: (sug) => {
  54. vueHeader.searchq = sug;
  55. },
  56. closeSearch: () => {
  57. vueHeader.searchq = '';
  58. },
  59. moveSelectSearch: () => {
  60. if(vueHeader.searchmoveidx < 1) { return; }
  61. let i = vueHeader.searchmoveidx - 1;
  62. if(vueHeader.searchmovearr[i].document) {
  63. window.location.assign('/' + vueHeader.searchmovearr[i].document.entryPath);
  64. } else {
  65. vueHeader.searchq = vueHeader.searchmovearr[i];
  66. }
  67. },
  68. moveDownSearch: () => {
  69. if(vueHeader.searchmoveidx < vueHeader.searchmovearr.length) {
  70. vueHeader.searchmoveidx++;
  71. }
  72. },
  73. moveUpSearch: () => {
  74. if(vueHeader.searchmoveidx > 0) {
  75. vueHeader.searchmoveidx--;
  76. }
  77. }
  78. }
  79. });
  80. $('main').on('click', vueHeader.closeSearch);
  81. }
  82. });