danielebarchiesi@4
|
1 /**
|
danielebarchiesi@4
|
2 * @file
|
danielebarchiesi@4
|
3 * SEARCH AUTOCOMPLETE (version 7.3-x)
|
danielebarchiesi@4
|
4 */
|
danielebarchiesi@4
|
5
|
danielebarchiesi@4
|
6 /*
|
danielebarchiesi@4
|
7 * @authors
|
danielebarchiesi@4
|
8 * Miroslav Talenberg (Dominique CLAUSE) <http://www.axiomcafe.fr/contact>
|
danielebarchiesi@4
|
9 *
|
danielebarchiesi@4
|
10 * Sponsored by:
|
danielebarchiesi@4
|
11 * www.axiomcafe.fr
|
danielebarchiesi@4
|
12 */
|
danielebarchiesi@4
|
13
|
danielebarchiesi@4
|
14 (function ($) {
|
danielebarchiesi@4
|
15 Drupal.behaviors.search_autocomplete = {
|
danielebarchiesi@4
|
16 attach: function(context) {
|
danielebarchiesi@4
|
17 if (Drupal.settings.search_autocomplete) {
|
danielebarchiesi@4
|
18 $.each(Drupal.settings.search_autocomplete, function(key, value) {
|
danielebarchiesi@4
|
19 var NoResultsLabel = Drupal.settings.search_autocomplete[key].no_results;
|
danielebarchiesi@4
|
20 $(Drupal.settings.search_autocomplete[key].selector).addClass('ui-autocomplete-processed').autocomplete({
|
danielebarchiesi@4
|
21 minLength: Drupal.settings.search_autocomplete[key].minChars,
|
danielebarchiesi@4
|
22 source: function(request, response) {
|
danielebarchiesi@4
|
23 if (Drupal.settings.search_autocomplete[key].type == 0) { // external URL
|
danielebarchiesi@4
|
24 $.getJSON(Drupal.settings.search_autocomplete[key].datas, { q: request.term }, function (results) {
|
danielebarchiesi@4
|
25 // Only return the number of values set in the settings.
|
danielebarchiesi@4
|
26 if (!results.length && NoResultsLabel) {
|
danielebarchiesi@4
|
27 results = [NoResultsLabel];
|
danielebarchiesi@4
|
28 }
|
danielebarchiesi@4
|
29 response(results.slice(0, Drupal.settings.search_autocomplete[key].max_sug));
|
danielebarchiesi@4
|
30 });
|
danielebarchiesi@4
|
31 } else if (Drupal.settings.search_autocomplete[key].type == 1) { // internal URL
|
danielebarchiesi@4
|
32 $.getJSON(Drupal.settings.search_autocomplete[key].datas + request.term, { }, function (results) {
|
danielebarchiesi@4
|
33 // Only return the number of values set in the settings.
|
danielebarchiesi@4
|
34 if (!results.length && NoResultsLabel) {
|
danielebarchiesi@4
|
35 results = [NoResultsLabel];
|
danielebarchiesi@4
|
36 }
|
danielebarchiesi@4
|
37 response(results.slice(0, Drupal.settings.search_autocomplete[key].max_sug));
|
danielebarchiesi@4
|
38 });
|
danielebarchiesi@4
|
39 } else if (Drupal.settings.search_autocomplete[key].type == 2) { // static resources
|
danielebarchiesi@4
|
40 var results = $.ui.autocomplete.filter( Drupal.settings.search_autocomplete[key].datas, request.term );
|
danielebarchiesi@4
|
41 if (!results.length && NoResultsLabel) {
|
danielebarchiesi@4
|
42 results = [NoResultsLabel];
|
danielebarchiesi@4
|
43 }
|
danielebarchiesi@4
|
44 // Only return the number of values set in the settings.
|
danielebarchiesi@4
|
45 response(results.slice(0, Drupal.settings.search_autocomplete[key].max_sug));
|
danielebarchiesi@4
|
46 }
|
danielebarchiesi@4
|
47 },
|
danielebarchiesi@4
|
48 open: function(event, ui) {
|
danielebarchiesi@4
|
49 $(".ui-autocomplete li.ui-menu-item:odd").addClass("ui-menu-item-odd");
|
danielebarchiesi@4
|
50 $(".ui-autocomplete li.ui-menu-item:even").addClass("ui-menu-item-even");
|
danielebarchiesi@4
|
51 },
|
danielebarchiesi@4
|
52 select: function(event, ui) {
|
danielebarchiesi@4
|
53 if (ui.item.label === NoResultsLabel) {
|
danielebarchiesi@4
|
54 event.preventDefault();
|
danielebarchiesi@4
|
55 } else
|
danielebarchiesi@4
|
56 if (Drupal.settings.search_autocomplete[key].auto_redirect == 1 && ui.item.link) {
|
danielebarchiesi@4
|
57 document.location.href = ui.item.link;
|
danielebarchiesi@4
|
58 } else if (Drupal.settings.search_autocomplete[key].auto_submit == 1) {
|
danielebarchiesi@4
|
59 $(this).val(ui.item.label);
|
danielebarchiesi@4
|
60 $(this).closest("form").submit();
|
danielebarchiesi@4
|
61 }
|
danielebarchiesi@4
|
62 },
|
danielebarchiesi@4
|
63 focus: function (event, ui) {
|
danielebarchiesi@4
|
64 if (ui.item.label === NoResultsLabel) {
|
danielebarchiesi@4
|
65 event.preventDefault();
|
danielebarchiesi@4
|
66 }
|
danielebarchiesi@4
|
67 }
|
danielebarchiesi@4
|
68 }).autocomplete("widget").attr("id", "ui-theme-" + Drupal.settings.search_autocomplete[key].theme);
|
danielebarchiesi@4
|
69 });
|
danielebarchiesi@4
|
70 }
|
danielebarchiesi@4
|
71 }
|
danielebarchiesi@4
|
72 };
|
danielebarchiesi@4
|
73 })(jQuery); |