123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- (function ($, Drupal, drupalSettings) {
- var settings = drupalSettings.edlp_search;
- var _$body = $('body');
- var _$container;
- var _$form;
- function init(){
- // console.log('EdlpSearch Init', settings);
- initEvents();
- initAjax();
- };
- function initEvents(){
- $('body')
- .on('new-content-ajax-loaded', initAjax)
- .on('edlp_search_search_form-col-closed', onSearchClosed);
- };
- function initAjax(){
- _$form = $('#edlp-search-form:not(.ajax-enabled)');
- if(!_$form.length) return false;
- //console.log('EdlpSearch initAjaxForm()');
- _$form = $('#edlp-search-form:not(.ajax-enabled)')
- .on('submit', onSubmitForm)
- .addClass('ajax-enabled');
- _$container = _$form.parents('.row');
- if(!_$container.length){
- _$container = _$form.parent();
- }
- };
- function onSubmitForm(e){
- e.preventDefault();
- // console.log('onSubmitForm',e);
- var args = {};
- // search for key words
- args.keys = $('input[type="search"]', this).val();
- // entries filter
- args.entries = [];
- $('input[type="checkbox"]:checked', '#edit-entries').each(function(index, el) {
- args.entries.push($(this).val());
- });
- // langues
- args.langues = $('input[name="language"]', this).val();
- // genres
- args.genres = $('input[name="genres"]', this).val();
- //console.log('EdlpSearch onSubmitForm() : args',args);
- loadResults(args);
- return false;
- };
- function loadResults(args){
- //console.log('EdlpSearch loadResults() : args', args);
- _$form.addClass('ajax-loading');
- _$body.addClass('ajax-loading');
- $('[theme="edlp_search_results"]', _$container).addClass('ajax-loading');
- var path = window.location.origin + drupalSettings.path.baseUrl +settings.results_ajax_url;
- $.getJSON(path, args)
- .done(function(data){
- onResultsLoaded(data);
- })
- .fail(function(jqxhr, textStatus, error){
- onResultsLoadFail(jqxhr, textStatus, error);
- });
- };
- function onResultsLoaded(data){
- // console.log('EdlpSearch onResultsLoaded()', data);
- _$form.removeClass('ajax-loading');
- _$body.removeClass('ajax-loading');
- // insert results col
- $prev_results = $('[theme="edlp_search_results"]', _$container);
- if($prev_results.length){
- $prev_results.replaceWith(data.rendered);
- }else{
- _$container.append(data.rendered);
- }
- // trigger event
- _$body.trigger({
- 'type':'search-results-loaded',
- 'results':data.results_nids
- });
- // piwik
- if(typeof _paq !== 'undefined'){
- // page tracking
- // https://matomo.org/blog/2017/02/how-to-track-single-page-websites-using-piwik-analytics/
- // _paq.push(['setCustomUrl', state.url]);
- // _paq.push(['setDocumentTitle', data.title]);
- // _paq.push(['trackPageView']);
- // trackEvent(category, action, [name], [value])
- var search_name = data.keys+';'+data.langues+';'+data.genres+';'+data.entry_names.join(',');
- // _paq.push(['trackEvent', 'AjaxSearch', 'Results', search_name, data.results_nids.length]);
- // piwik track searches
- // trackSiteSearch(keyword, [category], [resultsCount])
- _paq.push(['trackSiteSearch', search_name, 'search', data.results_nids.length]);
- }
- };
- function onResultsLoadFail(jqxhr, textStatus, error){
- console.warn('EdlpSearch : search results ajax load failed : '+error, jqxhr.responseText);
- };
- function onSearchClosed(e){
- // console.log('Edlp Search onSearchClosed()');
- $('div[theme="edlp_search_results"]').remove();
- // trigger event
- _$body.trigger({'type':'search-closed'});
- }
- init();
- })(jQuery, Drupal, drupalSettings);
|