(function ($, D, ds, debounce) { D.behaviors.dabSolrSearch = { attach: function (context, settings) { //Close suggestion when click outside wrapper $(window).click(function() { var selector = '#dab-solr-search-block .dab-solr-search-results-wrapper'; $(selector).addClass('hidden'); $(selector).html(''); }); $('#dab-solr-search-block .dab-solr-search-form').click(function(event){ event.stopPropagation(); }); // Init. $('.dab-solr-search-form', context).once('dabSolrSearchProcessed').each(function () { var $this = $(this); $this.on('keyup change paste', ':input', D.behaviors.dabSolrSearch.autocomplete); //Handle button disabling $this.on('keyup change paste', ':input', function (e) { e.preventDefault(); if (this.tagName == 'INPUT') { var buttonSelector = $('.dab-solr-search-form-button'); if ($(this).val().length <= 1) { buttonSelector.attr("disabled", true); } else { buttonSelector.removeAttr("disabled"); } } }); $this.find('.dab-solr-search-form-button').on('click', function (e) { e.preventDefault(); e.stopPropagation(); var url = D.url(D.behaviors.dabSolrSearch.path); var params = $.param({ keys: D.behaviors.dabSolrSearch.keys, filter: D.behaviors.dabSolrSearch.category }); if (params.length) { url += '?' + params; } window.location = D.url.toAbsolute(url); }); $this.find('.dab-solr-search-form-categories').on('click', function (e) { e.preventDefault(); e.stopPropagation(); }); }); }, autocomplete: debounce(function() { switch (this.tagName) { case 'SELECT': D.behaviors.dabSolrSearch.category = $(this).children(':selected').val(); D.behaviors.dabSolrSearch.path = $(this).children(':selected').data('path'); break; case 'INPUT': if (D.behaviors.dabSolrSearch.keys === $(this).val()) { return; } D.behaviors.dabSolrSearch.keys = $(this).val(); break; } var selector = D.formatString('#!id .dab-solr-search-results-wrapper', { '!id': $(this).parents('.dab-solr-search-block').first().attr('id') }); if (!$(this).hasClass('with-suggestions') || D.behaviors.dabSolrSearch.keys.length <= 1) { // Clear search. $(selector).addClass('hidden'); $(selector).html(''); return; } // Add loader $(selector).removeClass('hidden'); $(selector).html('
'); // Details of the ajax action. var ajaxSettings = { url: D.url.toAbsolute(ds.dabSolrSearch.autocompletePath), submit: { category: D.behaviors.dabSolrSearch.category, keys: D.behaviors.dabSolrSearch.keys, selector: selector } }; var ajaxCall = D.ajax(ajaxSettings); ajaxCall.execute(); }, 500, false), category: ds.dabSolrSearch.defaultCategory.id, path: ds.dabSolrSearch.defaultCategory.path, keys: '', }; $.fn.handleAjaxSearch = function () { $(this).removeClass('hidden'); }; $.fn.clearAjaxSearch = function () { $(this).html(''); }; })(jQuery, Drupal, drupalSettings, Drupal.debounce);