diff rhodecode/public/js/rhodecode.js @ 1653:b1e1dffd595c beta

one generic qfilter function.
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 04 Nov 2011 21:18:46 +0200
parents 96ae22a4e963
children fab837f40cf7
line wrap: on
line diff
--- a/rhodecode/public/js/rhodecode.js	Thu Nov 03 03:00:53 2011 +0200
+++ b/rhodecode/public/js/rhodecode.js	Fri Nov 04 21:18:46 2011 +0200
@@ -219,3 +219,63 @@
     });
 }
 
+
+/**
+ * Quick filter widget
+ * 
+ * @param target: filter input target
+ * @param nodes: list of nodes in html we want to filter.
+ * @param display_element function that takes current node from nodes and
+ *    does hide or show based on the node
+ * 
+ */
+var q_filter = function(target,nodes,display_element){
+	
+	var nodes = nodes;
+	var q_filter_field = YUD.get(target);
+	var F = YAHOO.namespace(target);
+
+	YUE.on(q_filter_field,'click',function(){
+	   q_filter_field.value = '';
+	});
+
+	YUE.on(q_filter_field,'keyup',function(e){
+	    clearTimeout(F.filterTimeout); 
+	    F.filterTimeout = setTimeout(F.updateFilter,600); 
+	});
+
+	F.filterTimeout = null;
+
+	var show_node = function(node){
+		YUD.setStyle(node,'display','')
+	}
+	var hide_node = function(node){
+		YUD.setStyle(node,'display','none');
+	}
+	
+	F.updateFilter  = function() { 
+	   // Reset timeout 
+	   F.filterTimeout = null;
+	   
+	   var obsolete = [];
+	   
+	   var req = q_filter_field.value.toLowerCase();
+	   
+	   var l = nodes.length;
+	   var i;
+       for (i=0;i<l;i++ ){
+    	   var n = nodes[i];
+    	   var target_element = display_element(n)
+    	   if(req && n.innerHTML.toLowerCase().indexOf(req) == -1){
+    		   hide_node(target_element);
+    	   }
+    	   else{
+    		   show_node(target_element);
+    	   }
+       }	  	   
+
+	}	
+}
+
+
+