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.

83 lines
2.3 KiB

  1. 'use strict'
  2. /* global $, Vue, _, socket */
  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].entryPath
  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].entryPath)
  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. }