edlp_search.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. (function ($, Drupal, drupalSettings) {
  2. var settings = drupalSettings.edlp_search;
  3. var _$body = $('body');
  4. var _$container;
  5. var _$form;
  6. function init(){
  7. // console.log('EdlpSearch Init', settings);
  8. initEvents();
  9. initAjax();
  10. };
  11. function initEvents(){
  12. $('body')
  13. .on('new-content-ajax-loaded', initAjax)
  14. .on('edlp_search_search_form-col-closed', onSearchClosed);
  15. };
  16. function initAjax(){
  17. _$form = $('#edlp-search-form:not(.ajax-enabled)');
  18. if(!_$form.length) return false;
  19. console.log('EdlpSearch initAjaxForm()');
  20. _$form = $('#edlp-search-form:not(.ajax-enabled)')
  21. .on('submit', onSubmitForm)
  22. .addClass('ajax-enabled');
  23. _$container = _$form.parents('.row');
  24. if(!_$container.length){
  25. _$container = _$form.parent();
  26. }
  27. };
  28. function onSubmitForm(e){
  29. e.preventDefault();
  30. // console.log('onSubmitForm',e);
  31. var args = {};
  32. // search for key words
  33. args.keys = $('input[type="search"]', this).val();
  34. // entries filter
  35. args.entries = [];
  36. $('input[type="checkbox"]:checked', '#edit-entries').each(function(index, el) {
  37. args.entries.push($(this).val());
  38. });
  39. // langues
  40. args.langues = $('input[name="language"]', this).val();
  41. // genres
  42. args.genres = $('input[name="genres"]', this).val();
  43. console.log('EdlpSearch onSubmitForm() : args',args);
  44. if(args.keys.length > 2
  45. || args.entries.length > 0
  46. || args.langues.length > 2
  47. || args.genres.length > 2){
  48. loadResults(args);
  49. }
  50. return false;
  51. };
  52. function loadResults(args){
  53. console.log('EdlpSearch loadResults() : args', args);
  54. _$form.addClass('ajax-loading');
  55. _$body.addClass('ajax-loading');
  56. $('[theme="edlp_search_results"]', _$container).addClass('ajax-loading');
  57. var path = window.location.origin + drupalSettings.path.baseUrl +settings.results_ajax_url;
  58. $.getJSON(path, args)
  59. .done(function(data){
  60. onResultsLoaded(data);
  61. })
  62. .fail(function(jqxhr, textStatus, error){
  63. onResultsLoadFail(jqxhr, textStatus, error);
  64. });
  65. };
  66. function onResultsLoaded(data){
  67. console.log('EdlpSearch onResultsLoaded()', data);
  68. _$form.removeClass('ajax-loading');
  69. _$body.removeClass('ajax-loading');
  70. // insert results col
  71. $prev_results = $('[theme="edlp_search_results"]', _$container);
  72. if($prev_results.length){
  73. $prev_results.replaceWith(data.rendered);
  74. }else{
  75. _$container.append(data.rendered);
  76. }
  77. // trigger event
  78. _$body.trigger({
  79. 'type':'search-results-loaded',
  80. 'results':data.results_nids
  81. });
  82. // piwik
  83. if(typeof _paq !== 'undefined'){
  84. // page tracking
  85. // https://matomo.org/blog/2017/02/how-to-track-single-page-websites-using-piwik-analytics/
  86. // _paq.push(['setCustomUrl', state.url]);
  87. // _paq.push(['setDocumentTitle', data.title]);
  88. // _paq.push(['trackPageView']);
  89. // trackEvent(category, action, [name], [value])
  90. var search_name = data.keys+';'+data.langues+';'+data.genres+';'+data.entry_names.join(',');
  91. // _paq.push(['trackEvent', 'AjaxSearch', 'Results', search_name, data.results_nids.length]);
  92. // piwik track searches
  93. // trackSiteSearch(keyword, [category], [resultsCount])
  94. _paq.push(['trackSiteSearch', search_name, 'search', data.results_nids.length]);
  95. }
  96. };
  97. function onResultsLoadFail(jqxhr, textStatus, error){
  98. console.warn('EdlpSearch : search results ajax load failed : '+error, jqxhr.responseText);
  99. };
  100. function onSearchClosed(e){
  101. // console.log('Edlp Search onSearchClosed()');
  102. $('div[theme="edlp_search_results"]').remove();
  103. // trigger event
  104. _$body.trigger({'type':'search-closed'});
  105. }
  106. init();
  107. })(jQuery, Drupal, drupalSettings);