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.

87 lines
2.5 KiB

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