Guest User

Untitled

a guest
Jan 21st, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. dso.search = function() {
  2. var data = false;
  3. var search = $('#search');
  4. var template = _.template('<li><a href="<%=url%>"><span class="title"><%=title%></span><small><%=subtitle%></small><small class="date"><%=date%></small></a></li>');
  5. var find = function(phrase) {
  6. if (!data) return $.ajax({
  7. url: '/search.json',
  8. dataType: 'json',
  9. success: function(resp) {
  10. data = _(resp).chain()
  11. .compact()
  12. .map(function(p) {
  13. p.words = (p.title.toLowerCase() +' '+ p.subtitle.toLowerCase()).match(/(\w+)/g);
  14. return p;
  15. })
  16. .value();
  17. find(phrase);
  18. }
  19. });
  20. var matches = _(data).filter(function(p) {
  21. return _(phrase).filter(function(a) {
  22. return _(p.words).any(function(b) {
  23. return a === b || b.indexOf(a) === 0;
  24. });
  25. }).length === phrase.length;
  26. });
  27. return matches;
  28. };
  29. $('a', search).click(function() {
  30. if ($('body').hasClass('searching')) {
  31. $('body').removeClass('searching');
  32. $('.branding .wasActive').removeClass('wasActive').addClass('active');
  33. } else {
  34. $('body').addClass('searching');
  35. $('.branding .active').removeClass('active').addClass('wasActive');
  36. $('input', search).focus();
  37. }
  38. return false;
  39. });
  40. $('input', search).keyup(_(function() {
  41. $('#search-results ul').empty();
  42. $('#search-results > div').removeClass('active');
  43.  
  44. var el = {
  45. 'empty': $('#search-results > div.empty'),
  46. 'about': $('#search-results > div.about'),
  47. 'projects': $('#search-results > div.projects'),
  48. 'team': $('#search-results > div.team'),
  49. 'blog': $('#search-results > div.blog')
  50. };
  51. var done = {};
  52. var phrase = $('input', search).val();
  53. if (phrase.length >= 4) {
  54. var matches = find(phrase.toLowerCase().match(/(\w+)/g));
  55. _(matches).each(function(p) {
  56. if (!p.category) return;
  57. if (!done[p.category]) {
  58. el[p.category].addClass('active');
  59. done[p.category] = true;
  60. }
  61. $('ul', el[p.category]).append(template(p));
  62. });
  63. if (matches.length) return;
  64. }
  65. $('#search-results > div.empty').addClass('active');
  66. return false;
  67. }).debounce(100));
  68. };
  69. $(dso.search);
Add Comment
Please, Sign In to add comment