123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- "use strict";
- if($('#search-input').length) {
- $('#search-input').focus();
- $('.searchresults').css('display', 'block');
- var vueHeader = new Vue({
- el: '#header-container',
- data: {
- searchq: '',
- searchres: [],
- searchsuggest: [],
- searchload: 0,
- searchactive: false,
- searchmoveidx: 0,
- searchmovekey: '',
- searchmovearr: []
- },
- watch: {
- searchq: (val, oldVal) => {
- vueHeader.searchmoveidx = 0;
- if(val.length >= 3) {
- vueHeader.searchactive = true;
- vueHeader.searchload++;
- socket.emit('search', { terms: val }, (data) => {
- vueHeader.searchres = data.match;
- vueHeader.searchsuggest = data.suggest;
- vueHeader.searchmovearr = _.concat([], vueHeader.searchres, vueHeader.searchsuggest);
- if(vueHeader.searchload > 0) { vueHeader.searchload--; }
- });
- } else {
- vueHeader.searchactive = false;
- vueHeader.searchres = [];
- vueHeader.searchsuggest = [];
- vueHeader.searchmovearr = [];
- vueHeader.searchload = 0;
- }
- },
- searchmoveidx: (val, oldVal) => {
- if(val > 0) {
- vueHeader.searchmovekey = (vueHeader.searchmovearr[val - 1]) ?
- 'res.' + vueHeader.searchmovearr[val - 1]._id :
- 'sug.' + vueHeader.searchmovearr[val - 1];
- } else {
- vueHeader.searchmovekey = '';
- }
- }
- },
- methods: {
- useSuggestion: (sug) => {
- vueHeader.searchq = sug;
- },
- closeSearch: () => {
- vueHeader.searchq = '';
- },
- moveSelectSearch: () => {
- if(vueHeader.searchmoveidx < 1) { return; }
- let i = vueHeader.searchmoveidx - 1;
- if(vueHeader.searchmovearr[i]) {
- window.location.assign('/' + vueHeader.searchmovearr[i]._id);
- } else {
- vueHeader.searchq = vueHeader.searchmovearr[i];
- }
- },
- moveDownSearch: () => {
- if(vueHeader.searchmoveidx < vueHeader.searchmovearr.length) {
- vueHeader.searchmoveidx++;
- }
- },
- moveUpSearch: () => {
- if(vueHeader.searchmoveidx > 0) {
- vueHeader.searchmoveidx--;
- }
- }
- }
- });
- $('main').on('click', vueHeader.closeSearch);
- }
|