| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 | 
							
- // Registers the rules namespace.
 
- Drupal.rules = Drupal.rules || {};
 
- (function($) {
 
-   Drupal.behaviors.rules_autocomplete = {
 
-     attach: function(context) {
 
-       var autocomplete_settings = Drupal.settings.rules_autocomplete;
 
-       $('input.rules-autocomplete').once(function() {
 
-         var input = this;
 
-         new Drupal.rules.autocomplete(input, autocomplete_settings[$(input).attr('id')]);
 
-       });
 
-     }
 
-   };
 
-   /**
 
-    * Rules autocomplete object.
 
-    */
 
-   Drupal.rules.autocomplete = function(input, settings) {
 
-     this.id = settings.inputId;
 
-     this.uri = settings.source;
 
-     this.jqObject = $('#' + this.id);
 
-     this.cache = new Array();
 
-     this.jqObject.addClass('ui-corner-left');
 
-     this.opendByFocus = false;
 
-     this.focusOpens = true;
 
-     this.groupSelected = false;
 
-     this.button = $('<span> </span>');
 
-     this.button.attr( {
 
-       'tabIndex': -1,
 
-       'title': 'Show all items'
 
-     });
 
-     this.button.insertAfter(this.jqObject);
 
-     this.button.button( {
 
-       icons: {
 
-         primary: 'ui-icon-triangle-1-s'
 
-       },
 
-       text: false
 
-     });
 
-     // Don't round the left corners.
 
-     this.button.removeClass('ui-corner-all');
 
-     this.button.addClass('ui-corner-right ui-button-icon rules-autocomplete-button');
 
-     this.jqObject.autocomplete();
 
-     this.jqObject.autocomplete("option", "minLength", 0);
 
-     // Add a custom class, so we can style the autocomplete box without
 
-     // interfering with other jquery autocomplete widgets.
 
-     this.jqObject.autocomplete("widget").addClass('rules-autocomplete');
 
-     // Save the current rules_autocomplete object, so it can be used in
 
-     // handlers.
 
-     var instance = this;
 
-     // Event handlers
 
-     this.jqObject.focus(function() {
 
-       if (instance.focusOpens) {
 
-         instance.toggle();
 
-         instance.opendByFocus = true;
 
-       }
 
-       else {
 
-         instance.focusOpens = true;
 
-       }
 
-     });
 
-     // Needed when the window is closed but the textfield has the focus.
 
-     this.jqObject.click(function() {
 
-       // Since the focus event happens earlier then the focus event, we need to
 
-       // check here, if the window should be opened.
 
-       if (!instance.opendByFocus) {
 
-         instance.toggle();
 
-       }
 
-       else {
 
-         instance.opendByFocus = false;
 
-       }
 
-     });
 
-     this.jqObject.bind("autocompleteselect", function(event, ui) {
 
-       // If a group was selected then set the groupSelected to true for the
 
-       // overriden close function from jquery autocomplete.
 
-       if (ui.item.value.substring(ui.item.value.length - 1, ui.item.value.length) == ":") {
 
-         instance.groupSelected = true;
 
-       }
 
-       instance.focusOpens = false;
 
-       instance.opendByFocus = false;
 
-     });
 
-     this.jqObject.autocomplete("option", "source", function(request, response) {
 
-       if (request.term in instance.cache) {
 
-         response(instance.cache[request.term]);
 
-         return;
 
-       }
 
-       $.ajax( {
 
-         url: instance.uri + '/' + request.term,
 
-         dataType: "json",
 
-         success: function(data) {
 
-           instance.success(data, request, response);
 
-         }
 
-       });
 
-     });
 
-     // Newer versions of jQuery UI use element.data('ui-autocomplete'), older
 
-     // versions use element.data('autocomplete').
 
-     var autocompleteDataKey = typeof(this.jqObject.data('autocomplete')) === 'object' ? 'autocomplete' : 'ui-autocomplete';
 
-     // Since jquery autocomplete by default strips html text by using .text()
 
-     // we need our own _renderItem function to display html content.
 
-     this.jqObject.data(autocompleteDataKey)._renderItem = function(ul, item) {
 
-       return $("<li></li>").data("item.autocomplete", item).append("<a>" + item.label + "</a>").appendTo(ul);
 
-     };
 
-     // Override close function
 
-     this.jqObject.data(autocompleteDataKey).close = function (event) {
 
-       var value = this.element.val();
 
-       // If the selector is not a group, then trigger the close event an and
 
-       // hide the menu.
 
-       if (value === undefined || instance.groupSelected === false) {
 
-         clearTimeout(this.closing);
 
-         if (this.menu.element.is(":visible")) {
 
-           this._trigger("close", event);
 
-           this.menu.element.hide();
 
-           // Use deactivate for older versions of jQuery UI.
 
-           if (typeof(this.menu.deactivate) === 'function') {
 
-             this.menu.deactivate();
 
-           }
 
-         }
 
-       }
 
-       else {
 
-         // Else keep all open and trigger a search for the group.
 
-         instance.jqObject.autocomplete("search", instance.jqObject.val());
 
-         // After the suggestion box was opened again, we want to be able to
 
-         // close it.
 
-         instance.groupSelected = false;
 
-       }
 
-     };
 
-     this.button.click(function() {
 
-       instance.toggle();
 
-     });
 
-   };
 
-   /**
 
-    * Success function for Rules autocomplete object.
 
-    */
 
-   Drupal.rules.autocomplete.prototype.success = function(data, request, response) {
 
-     var list = new Array();
 
-     jQuery.each(data, function(index, value) {
 
-       list.push( {
 
-         label: value,
 
-         value: index
 
-       });
 
-     });
 
-     this.cache[request.term] = list;
 
-     response(list);
 
-   };
 
-   /**
 
-    * Open the autocomplete window.
 
-    * @param searchFor The term for will be searched for. If undefined then the
 
-    *                  entered input text will be used.
 
-    */
 
-   Drupal.rules.autocomplete.prototype.open = function(searchFor) {
 
-     // If searchFor is undefined, we want to search for the passed argument.
 
-     this.jqObject.autocomplete("search", ((searchFor === undefined) ? this.jqObject.val() : searchFor));
 
-     this.button.addClass("ui-state-focus");
 
-   };
 
-   /**
 
-    * Close the autocomplete window.
 
-    */
 
-   Drupal.rules.autocomplete.prototype.close = function() {
 
-     this.jqObject.autocomplete("close");
 
-     this.button.removeClass("ui-state-focus");
 
-   };
 
-   /**
 
-    * Toogle the autcomplete window.
 
-    */
 
-   Drupal.rules.autocomplete.prototype.toggle = function() {
 
-     if (this.jqObject.autocomplete("widget").is(":visible")) {
 
-       this.close();
 
-       this.focusOpens = true;
 
-     }
 
-     else {
 
-       var groups = this.jqObject.val().split(":");
 
-       var selector = "";
 
-       for (var i=0; i<groups.length-1; i++) {
 
-         selector = selector.concat(groups[i]) + ":";
 
-       }
 
-       this.focusOpens = false;
 
-       this.jqObject.focus();
 
-       this.open(selector);
 
-     }
 
-   };
 
- })(jQuery);
 
 
  |