upgrade omega again
[indybay:drupal.git] / docs / sites / all / modules / contrib / context / context_ui / theme / filter.js
1 /**
2  *  create a simple search filter thing for a list
3  */
4 (function ($) {
5   Drupal.Filter = function (list, title, type, parent){
6     this.list = list;
7     this.title = title;
8     //provide defaults for type and parent so bad things don't happen
9     if (!type) { var type = '*'; }
10     this.type = type;
11     if (!parent) { var parent = list; }
12     this.parent = parent;
13
14     this.init();
15   }
16
17   Drupal.Filter.prototype = {
18     init : function(){
19       this.wrapper = $('<div class="filter-wrapper"></div>');
20       if(this.title){
21        this.title = '<h3>' + this.title + '</h3>';
22        this.wrapper.append(this.title);
23       }
24       this.input = $('<input type="text" class="filter" />');
25       this.wrapper.append(this.input);
26
27       $(this.parent).append(this.wrapper);
28       this.createHandlers();
29     },
30     createHandlers : function(){
31       var self = this;
32       $(this.input).keyup(function(e){
33         self.filter();
34       });
35     },
36     filter : function(){
37       //show all first off
38       $('*', this.list).show();
39       //hide ignored items
40       if(this.input.val()) {
41         $('*', this.list).not(this.type).hide();
42       }
43
44       var regex = new RegExp(this.input.val(), 'i');
45
46       var self = this;
47       $(this.type, this.list).each(function(ind, el) {
48         var string = self.strip(el.innerHTML);
49         if(!regex.test(string)){
50           $(el).hide();
51         } else { //show the parent and any labels or whatever in the parent
52           var parent = $(el).parent().show();
53           $('*', parent).not(self.type).show();
54         }
55       });
56     },
57     strip : function(string){
58       var strip = /<([^<|^>]*)>/i;
59       while(strip.test(string)){
60        var matches = string.match(strip);
61        string = string.replace(strip, '');
62       }
63       return string;
64     }
65   };
66 })(jQuery);