changeset 2394:6776f4e569d7 codereview

Moved select widget to rhodecode.js
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 06 Jun 2012 01:01:33 +0200
parents b94eac50ec4d
children b262e349a7a5
files rhodecode/public/js/rhodecode.js rhodecode/templates/admin/users_groups/users_group_edit.html
diffstat 2 files changed, 141 insertions(+), 138 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/public/js/rhodecode.js	Tue Jun 05 22:00:40 2012 +0200
+++ b/rhodecode/public/js/rhodecode.js	Wed Jun 06 01:01:33 2012 +0200
@@ -205,7 +205,7 @@
 		success:s_wrapper,
 		failure:function(o){
 			console.log(o);
-			YUD.get(container).innerHTML='ERROR';
+			YUD.get(container).innerHTML='ERROR '+o.status;
 			YUD.setStyle(container,'opacity','1.0');
 			YUD.setStyle(container,'color','red');
 		}
@@ -1322,4 +1322,142 @@
     var comp = YAHOO.util.Sort.compare;
     var compState = comp(a_, b_, desc);
     return compState;
-};
\ No newline at end of file
+};
+
+
+
+/* Multi selectors */
+
+var MultiSelectWidget = function(selected_id, available_id, form_id){
+
+
+	//definition of containers ID's
+	var selected_container = selected_id;
+	var available_container = available_id;
+	
+	//temp container for selected storage.
+	var cache = new Array();
+	var av_cache = new Array();
+	var c =  YUD.get(selected_container);
+	var ac = YUD.get(available_container);
+	
+	//get only selected options for further fullfilment
+	for(var i = 0;node =c.options[i];i++){
+	    if(node.selected){
+	        //push selected to my temp storage left overs :)
+	        cache.push(node);
+	    }
+	}
+	
+	//get all available options to cache
+	for(var i = 0;node =ac.options[i];i++){
+	        //push selected to my temp storage left overs :)
+	        av_cache.push(node);
+	}
+	
+	//fill available only with those not in choosen
+	ac.options.length=0;
+	tmp_cache = new Array();
+	
+	for(var i = 0;node = av_cache[i];i++){
+	    var add = true;
+	    for(var i2 = 0;node_2 = cache[i2];i2++){
+	        if(node.value == node_2.value){
+	            add=false;
+	            break;
+	        }
+	    }
+	    if(add){
+	        tmp_cache.push(new Option(node.text, node.value, false, false));
+	    }
+	}
+	
+	for(var i = 0;node = tmp_cache[i];i++){
+	    ac.options[i] = node;
+	}
+	
+	function prompts_action_callback(e){
+	
+	    var choosen = YUD.get(selected_container);
+	    var available = YUD.get(available_container);
+	
+	    //get checked and unchecked options from field
+	    function get_checked(from_field){
+	        //temp container for storage.
+	        var sel_cache = new Array();
+	        var oth_cache = new Array();
+	
+	        for(var i = 0;node = from_field.options[i];i++){
+	            if(node.selected){
+	                //push selected fields :)
+	                sel_cache.push(node);
+	            }
+	            else{
+	                oth_cache.push(node)
+	            }
+	        }
+	
+	        return [sel_cache,oth_cache]
+	    }
+	
+	    //fill the field with given options
+	    function fill_with(field,options){
+	        //clear firtst
+	        field.options.length=0;
+	        for(var i = 0;node = options[i];i++){
+	                field.options[i]=new Option(node.text, node.value,
+	                        false, false);
+	        }
+	
+	    }
+	    //adds to current field
+	    function add_to(field,options){
+	        for(var i = 0;node = options[i];i++){
+	                field.appendChild(new Option(node.text, node.value,
+	                        false, false));
+	        }
+	    }
+	
+	    // add action
+	    if (this.id=='add_element'){
+	        var c = get_checked(available);
+	        add_to(choosen,c[0]);
+	        fill_with(available,c[1]);
+	    }
+	    // remove action
+	    if (this.id=='remove_element'){
+	        var c = get_checked(choosen);
+	        add_to(available,c[0]);
+	        fill_with(choosen,c[1]);
+	    }
+	    // add all elements
+	    if(this.id=='add_all_elements'){
+	        for(var i=0; node = available.options[i];i++){
+	                choosen.appendChild(new Option(node.text,
+	                        node.value, false, false));
+	        }
+	        available.options.length = 0;
+	    }
+	    //remove all elements
+	    if(this.id=='remove_all_elements'){
+	        for(var i=0; node = choosen.options[i];i++){
+	            available.appendChild(new Option(node.text,
+	                    node.value, false, false));
+	        }
+	        choosen.options.length = 0;
+	    }
+	
+	}
+	
+	YUE.addListener(['add_element','remove_element',
+	               'add_all_elements','remove_all_elements'],'click',
+	               prompts_action_callback)
+	if (form_id !== undefined) {
+		YUE.addListener(form_id,'submit',function(){
+		    var choosen = YUD.get(selected_container);
+		    for (var i = 0; i < choosen.options.length; i++) {
+		        choosen.options[i].selected = 'selected';
+		    }
+		});
+	}
+}
\ No newline at end of file
--- a/rhodecode/templates/admin/users_groups/users_group_edit.html	Tue Jun 05 22:00:40 2012 +0200
+++ b/rhodecode/templates/admin/users_groups/users_group_edit.html	Wed Jun 06 01:01:33 2012 +0200
@@ -140,141 +140,6 @@
     </div>
 </div>
 <script type="text/javascript">
-YAHOO.util.Event.onDOMReady(function(){
-  var D = YAHOO.util.Dom;
-  var E = YAHOO.util.Event;
-
-  //definition of containers ID's
-  var available_container = 'available_members';
-  var selected_container = 'users_group_members';
-
-  //form containing containers id
-  var form_id = 'edit_users_group';
-
-  //temp container for selected storage.
-  var cache = new Array();
-  var av_cache = new Array();
-  var c =  D.get(selected_container);
-  var ac = D.get(available_container);
-
-  //get only selected options for further fullfilment
-  for(var i = 0;node =c.options[i];i++){
-      if(node.selected){
-          //push selected to my temp storage left overs :)
-          cache.push(node);
-      }
-  }
-
-  //get all available options to cache
-  for(var i = 0;node =ac.options[i];i++){
-          //push selected to my temp storage left overs :)
-          av_cache.push(node);
-  }
-
-  //fill available only with those not in choosen
-  ac.options.length=0;
-  tmp_cache = new Array();
-
-  for(var i = 0;node = av_cache[i];i++){
-      var add = true;
-      for(var i2 = 0;node_2 = cache[i2];i2++){
-          if(node.value == node_2.value){
-              add=false;
-              break;
-          }
-      }
-      if(add){
-          tmp_cache.push(new Option(node.text, node.value, false, false));
-      }
-  }
-
-  for(var i = 0;node = tmp_cache[i];i++){
-      ac.options[i] = node;
-  }
-
-  function prompts_action_callback(e){
-
-      var choosen = D.get(selected_container);
-      var available = D.get(available_container);
-
-      //get checked and unchecked options from field
-      function get_checked(from_field){
-          //temp container for storage.
-          var sel_cache = new Array();
-          var oth_cache = new Array();
-
-          for(var i = 0;node = from_field.options[i];i++){
-              if(node.selected){
-                  //push selected fields :)
-                  sel_cache.push(node);
-              }
-              else{
-                  oth_cache.push(node)
-              }
-          }
-
-          return [sel_cache,oth_cache]
-      }
-
-      //fill the field with given options
-      function fill_with(field,options){
-          //clear firtst
-          field.options.length=0;
-          for(var i = 0;node = options[i];i++){
-                  field.options[i]=new Option(node.text, node.value,
-                          false, false);
-          }
-
-      }
-      //adds to current field
-      function add_to(field,options){
-          for(var i = 0;node = options[i];i++){
-                  field.appendChild(new Option(node.text, node.value,
-                          false, false));
-          }
-      }
-
-      // add action
-      if (this.id=='add_element'){
-          var c = get_checked(available);
-          add_to(choosen,c[0]);
-          fill_with(available,c[1]);
-      }
-      // remove action
-      if (this.id=='remove_element'){
-          var c = get_checked(choosen);
-          add_to(available,c[0]);
-          fill_with(choosen,c[1]);
-      }
-      // add all elements
-      if(this.id=='add_all_elements'){
-          for(var i=0; node = available.options[i];i++){
-                  choosen.appendChild(new Option(node.text,
-                          node.value, false, false));
-          }
-          available.options.length = 0;
-      }
-      //remove all elements
-      if(this.id=='remove_all_elements'){
-          for(var i=0; node = choosen.options[i];i++){
-              available.appendChild(new Option(node.text,
-                      node.value, false, false));
-          }
-          choosen.options.length = 0;
-      }
-
-  }
-
-  E.addListener(['add_element','remove_element',
-                 'add_all_elements','remove_all_elements'],'click',
-                 prompts_action_callback)
-
-  E.addListener(form_id,'submit',function(){
-      var choosen = D.get(selected_container);
-      for (var i = 0; i < choosen.options.length; i++) {
-          choosen.options[i].selected = 'selected';
-      }
-  });
-});
+  MultiSelectWidget('users_group_members','available_members','edit_users_group');
 </script>
 </%def>