view sites/all/modules/search_autocomplete/js/jquery.autocomplete.js @ 4:ce11bbd8f642

added modules
author danieleb <danielebarchiesi@me.com>
date Thu, 19 Sep 2013 10:38:44 +0100
parents
children
line wrap: on
line source
/**
 * @file
 * SEARCH AUTOCOMPLETE (version 7.3-x)
 */
 
/*
 * @authors
 * Miroslav Talenberg (Dominique CLAUSE) <http://www.axiomcafe.fr/contact>
 *
 * Sponsored by:
 * www.axiomcafe.fr
 */
 
(function ($) {
  Drupal.behaviors.search_autocomplete = {
    attach: function(context) {
      if (Drupal.settings.search_autocomplete) {
        $.each(Drupal.settings.search_autocomplete, function(key, value) {
          var NoResultsLabel = Drupal.settings.search_autocomplete[key].no_results;
          $(Drupal.settings.search_autocomplete[key].selector).addClass('ui-autocomplete-processed').autocomplete({
            minLength: Drupal.settings.search_autocomplete[key].minChars,
            source: function(request, response) {
              if (Drupal.settings.search_autocomplete[key].type == 0) {             // external URL
                $.getJSON(Drupal.settings.search_autocomplete[key].datas, { q: request.term }, function (results) {
                  // Only return the number of values set in the settings.
                  if (!results.length && NoResultsLabel) {
                      results = [NoResultsLabel];
                  }   
                  response(results.slice(0, Drupal.settings.search_autocomplete[key].max_sug));
                });
              } else if (Drupal.settings.search_autocomplete[key].type == 1) {      // internal URL
                $.getJSON(Drupal.settings.search_autocomplete[key].datas + request.term, { }, function (results) {
                  // Only return the number of values set in the settings.
                  if (!results.length && NoResultsLabel) {
                      results = [NoResultsLabel];
                  }
                  response(results.slice(0, Drupal.settings.search_autocomplete[key].max_sug));
                });
              } else if (Drupal.settings.search_autocomplete[key].type == 2) {      // static resources
                var results = $.ui.autocomplete.filter( Drupal.settings.search_autocomplete[key].datas, request.term );
                    if (!results.length && NoResultsLabel) {
                    results = [NoResultsLabel];
                }
                // Only return the number of values set in the settings.
                response(results.slice(0, Drupal.settings.search_autocomplete[key].max_sug));
              }
            },
            open: function(event, ui) {
              $(".ui-autocomplete li.ui-menu-item:odd").addClass("ui-menu-item-odd");
              $(".ui-autocomplete li.ui-menu-item:even").addClass("ui-menu-item-even");
            },
            select: function(event, ui) { 
              if (ui.item.label === NoResultsLabel) {
                event.preventDefault();
              } else
              if (Drupal.settings.search_autocomplete[key].auto_redirect == 1 && ui.item.link) {
                document.location.href = ui.item.link;
              } else if (Drupal.settings.search_autocomplete[key].auto_submit == 1) {
                  $(this).val(ui.item.label);
                  $(this).closest("form").submit();
              }
            },
            focus: function (event, ui) {
              if (ui.item.label === NoResultsLabel) {
                  event.preventDefault();
              }
            }
          }).autocomplete("widget").attr("id", "ui-theme-" + Drupal.settings.search_autocomplete[key].theme);
        });
      }
    }
  };
})(jQuery);