searchform.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. $(document).ready(function() {
  2. let queryEngine = new Bloodhound({
  3. datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
  4. queryTokenizer: Bloodhound.tokenizers.whitespace,
  5. remote: {
  6. url: process.env.MIX_API_SEARCH + '/%QUERY',
  7. wildcard: '%QUERY'
  8. }
  9. });
  10. $('.search-form .search-form-input').typeahead(null, {
  11. name: 'search',
  12. display: 'value',
  13. source: queryEngine,
  14. limit: 40,
  15. templates: {
  16. empty: [
  17. '<div class="alert alert-info mb-0 font-weight-bold">',
  18. 'No Results Found',
  19. '</div>'
  20. ].join('\n'),
  21. suggestion: function(data) {
  22. let type = data.type;
  23. let res = false;
  24. switch(type) {
  25. case 'hashtag':
  26. res = '<a href="'+data.url+'">' +
  27. '<div class="media d-flex align-items-center">' +
  28. '<div class="mr-3 h4 text-muted"><span class="fas fa-hashtag"></span></div>' +
  29. '<div class="media-body text-truncate">' +
  30. '<p class="mt-0 mb-0 font-weight-bold">'+data.value+'</p>' +
  31. '<p class="text-muted mb-0">'+data.count+' posts</p>' +
  32. '</div>' +
  33. '</div>' +
  34. '</a>';
  35. break;
  36. case 'profile':
  37. res = '<a href="'+data.url+'">' +
  38. '<div class="media d-flex align-items-center">' +
  39. '<div class="mr-3 h4 text-muted"><span class="far fa-user"></span></div>' +
  40. '<div class="media-body text-truncate">' +
  41. '<p class="mt-0 mb-0 font-weight-bold">'+data.name+'</p>' +
  42. '<p class="text-muted mb-0">'+data.value+'</p>' +
  43. '</div>' +
  44. '</div>' +
  45. '</a>';
  46. break;
  47. case 'status':
  48. res = '<a href="'+data.url+'">' +
  49. '<div class="media d-flex align-items-center">' +
  50. '<div class="mr-3 h4 text-muted"><img src="'+data.thumb+'" width="32px"></div>' +
  51. '<div class="media-body text-truncate">' +
  52. '<p class="mt-0 mb-0 font-weight-bold">'+data.name+'</p>' +
  53. '<p class="text-muted mb-0 small">'+data.value+'</p>' +
  54. '</div>' +
  55. '</div>' +
  56. '</a>';
  57. break;
  58. default:
  59. res = false;
  60. break;
  61. }
  62. if(res !== false) {
  63. return res;
  64. }
  65. }
  66. }
  67. });
  68. });