/** * create a simple search filter thing for a list */ (function ($) { Drupal.Filter = function (list, title, type, parent){ this.list = list; this.title = title; //provide defaults for type and parent so bad things don't happen if (!type) { var type = '*'; } this.type = type; if (!parent) { var parent = list; } this.parent = parent; this.init(); } Drupal.Filter.prototype = { init : function(){ this.wrapper = $('
'); if(this.title){ this.title = '

' + this.title + '

'; this.wrapper.append(this.title); } this.input = $(''); this.wrapper.append(this.input); $(this.parent).append(this.wrapper); this.createHandlers(); }, createHandlers : function(){ var self = this; $(this.input).keyup(function(e){ self.filter(); }); }, filter : function(){ //show all first off $('*', this.list).show(); //hide ignored items if(this.input.val()) { $('*', this.list).not(this.type).hide(); } var regex = new RegExp(this.input.val(), 'i'); var self = this; $(this.type, this.list).each(function(ind, el) { var string = self.strip(el.innerHTML); if(!regex.test(string)){ $(el).hide(); } else { //show the parent and any labels or whatever in the parent var parent = $(el).parent().show(); $('*', parent).not(self.type).show(); } }); }, strip : function(string){ var strip = /<([^<|^>]*)>/i; while(strip.test(string)){ var matches = string.match(strip); string = string.replace(strip, ''); } return string; } }; })(jQuery);