[MERGE] merge with main view editor branch.
authorVidhin Mehta (OpenERP) <vme@tinyerp.com>
Mon, 10 Oct 2011 13:24:41 +0000 (18:54 +0530)
committerVidhin Mehta (OpenERP) <vme@tinyerp.com>
Mon, 10 Oct 2011 13:24:41 +0000 (18:54 +0530)
bzr revid: vme@tinyerp.com-20111010132441-34xm5a1f1emtlziy

1  2 
addons/web/static/src/js/view_editor.js

@@@ -110,58 -109,54 +110,59 @@@ openerp.web.ViewEditor =   openerp.web.
          }
      },
  
 -    children_function : function(xml, root, parent_list, parent_id, main_object, parent_child_id) {
 +    children_function: function(xml, root, parent_list, parent_id, main_object){
          var self = this;
          var child_obj_list = [];
 -        var parent_child_id = parent_child_id;
 -        var parent_list = parent_list;
 -        var main_object = main_object;
          var children_list = $(xml).filter(root).children();
          var parents = $(children_list[0]).parents().get();
-             _.each(children_list, function( child_node ){
+         _.each(children_list, function (child_node) {
              var string = self.check_attr(child_node,child_node.tagName.toLowerCase(),parents.length);
              child_obj_list.push(string);
          });
          if (children_list.length != 0) {
 -            var child_ids = _.map(child_obj_list, function (num) { return num.id; });
 -            parent_child_id.push({'key': parent_id, 'value': child_ids});
              var parents = $(children_list[0]).parents().get();
              if (parents.length <= parent_list.length) {
-                 parent_list.splice(parents.length-1);
+                 parent_list.splice(parents.length - 1);
              }
              parent_list.push(parent_id);
-             $.each(main_object, function(key, val) {
+             _.each(main_object, function (val, key) {
                  self.save_object(val, parent_list.slice(1), child_obj_list);
              });
          }
 -
 -        for(var i=0; i<children_list.length; i++){
 -            self.children_function(children_list[i], children_list[i].tagName.toLowerCase(),
 -                parent_list,child_obj_list[i].id, main_object,parent_child_id);
 +        for (var i=0;i<children_list.length;i++) {
 +            self.children_function
 +            (children_list[i], children_list[i].tagName.toLowerCase(),
 +                parent_list, child_obj_list[i].id, main_object);
          }
 -        return {"main_object": main_object, "parent_child_id": parent_child_id};
 +        return main_object;
      },
  
 -    parse_xml :function(arch, view_id){
 +    parse_xml: function(arch, view_id) {
 +        var self = this;
          var root = $(arch).filter(":first")[0];
          var tag = root.tagName.toLowerCase();
 -        var root_object = this.check_attr(root, tag, this.xml_id);
 -        return this.children_function(arch, tag, [], this.xml_id - 1, [root_object], []);
 +        var obj = new Object();
 +        obj.child_id = [];
 +        obj.id = this.xml_id++;
 +        obj.level = 0;
 +        obj.name = "<view view_id='"+view_id+"'>"
 +        var root_object = self.check_attr(root,tag,0);
 +        f_obj = self.children_function(arch, tag, [], this.xml_id-1, [root_object], [])        
 +        obj.child_id.push( f_obj[0] );
 +        f_obj.pop();    
 +        f_obj.push(obj);
 +        return f_obj;
      },
  
 -    get_data : function(){
 +    get_data: function() {
          var self = this;
          var view_id =(($("input[name='radiogroup']:checked").parent()).parent()).attr('data-id');
-         var ve_dataset = new openerp.web.DataSet(this,'ir.ui.view');       
+         var ve_dataset = new openerp.web.DataSet(this, 'ir.ui.view');
          ve_dataset.read_ids([parseInt(view_id)], ['arch'], function (arch) {
              one_object = self.parse_xml(arch[0].arch,view_id);
+             one_object.arch = arch[0].arch;
              dataset = new openerp.web.DataSetSearch(self, 'ir.ui.view', null, null);
-             dataset.read_slice([],{domain : [['inherit_id','=',parseInt(view_id)]]},function (result) {
+             dataset.read_slice([], {domain : [['inherit_id','=', parseInt(view_id)]]}, function (result) {
                  _.each(result, function(res) {
                      self.inherit_view(one_object, res);
                  });
              });
          });
      },
-     parent_child_list: function(one_object, p_list) {
++    parent_child_list : function(one_object, p_list) {
 +        var self = this;
 +        _.each(one_object , function(element){
 +            if(element.child_id.length != 0){
 +                p_list.push({"key":element.id,"value":_.pluck(element.child_id, 'id')});
 +                self.parent_child_list(element.child_id, p_list);
 +            }
 +        });
 +        return p_list;
 +    },
-     inherit_view: function(one_object, result){
+     inherit_view : function(one_object, result){
          var self = this;
          var root = $(result.arch).filter('*');
 -        var xpath_list = [];
 +        var xml_list = [];
 +        var xpath_object ;
+         var part_expr = [];
 -        var position ;
          if (root[0].tagName.toLowerCase() == "data") {
 -            _.each($(root).find('xpath'), function(xpath) {
 -                xpath_list.push(xpath);
 -            });
 -        } else if(root[0].tagName.toLowerCase() == "xpath") {
 -            xpath_list.push(root[0]);
 +            xml_list = $(root[0]).children();
 +        } else {
 +            xml_list.push(root[0]);
          }
 -        _.each(xpath_list, function(element) {
 -            var xpath_object = self.parse_xml(element, result.id);
 -            var expr = $(element).attr('expr');
 -            var position = $(element).attr('position');
 -            part_expr = expr.split("/");
 -            if (part_expr[0] == "" && part_expr[1] == "") {
 -                 part_expr = part_expr.splice(2);
 -            } else if (part_expr[0] == "" ) {
 -                 part_expr = part_expr.splice(1);
 -            }
 -            if (part_expr[part_expr.length-1].search("@") != -1 ) {
 -                var part = part_expr[part_expr.length - 1];
 -                var xpath_list = $.trim(part.replace(/[^a-zA-Z 0-9 _]+/g,' ')).split(" ");
 -                one_object['parent_child_id'].push(xpath_object['parent_child_id'][0]);
 -                _.each(one_object['main_object'], function(val, key) {
 -                    var id = self.search_object(val, xpath_list, [], position, xpath_object['main_object'], []);
 -                    _.detect(one_object['parent_child_id'], function(res) {
 -                        if (res.key==id) {
 -                            res.value.push(xpath_object['main_object'][0].id);
 -                        }
 -                    });
 +        _.each(xml_list , function(xml){
 +            var parent_id;
 +            var check_list = [];
 +            if (xml.tagName.toLowerCase() == "xpath" && ($(xml).attr('expr')).indexOf("//") == -1) {
 +                var part_expr = _.without($(xml).attr('expr').split("/"),"");
 +                xpath_object = self.parse_xml(xml,result.id);
 +                self.full_path_search(part_expr ,one_object[0].child_id ,xpath_object,one_object);
 +            } else {
 +                xpath_object = self.parse_xml(xml,result.id);
 +                if($(xml).attr('expr')){
 +                    check_list = $.trim(($(xml).attr('expr')).replace(/[^a-zA-Z 0-9 _]+/g,' ')).split(" ");
 +                }else{ 
 +                    check_list = _.flatten(xpath_object[0].child_id[0].att_list);
 +                }
 +                $.each(one_object, function(key, val){
 +                    self.search_object(val, check_list, xpath_object);
                  });
              }
          });
      },
 -    search_object:function(val, list, p_list, position, xpath_object, r_list) {
 +    full_path_search: function(part_expr ,val ,xpath_object, one_object) {
          var self = this;
 -        var return_list = r_list;
 -        var main_list = $.trim(val.name.replace(/[^a-zA-Z 0-9 _]+/g,' ')).split(" ");
 -        var insert = _.intersection(main_list,list);
 -        var check = _.indexOf(p_list.child_id,xpath_object[0]);
 -        if (check == -1) {
 -            if (insert.length == list.length) {
 -                var level = val.level;
 -                _.each(xpath_object, function(val, key) {
 +        var obj;
 +        var check_list = _.without($.trim(part_expr[0].replace(/[^a-zA-Z 0-9 _]+/g,'!')).split("!"),"");
 +        if(check_list.length == 2){
 +            var int_val = parseInt(check_list[1]);
 +            if(int_val){
 +                var list_1 = _.select(val,function(element){
 +                    var main_list = _.flatten(element.att_list);
 +                    return _.include(main_list, check_list[0]);
 +                });
 +                obj = val[_.indexOf(val,list_1[int_val-1])];
 +            }else{
 +                obj = _.detect(val,function(element){
 +                    var main_list = _.flatten(element.att_list);
 +                    return _.include(main_list, check_list[0]);
 +                });
 +            }
 +        }else{
 +           obj = _.detect(val,function(element){
 +                var main_list = _.flatten(element.att_list);
 +                check_list = _.uniq(check_list);
 +                var insert = _.intersection(main_list,check_list);
 +                if(insert.length == check_list.length ){return element;}
 +            });
 +        }
 +        part_expr.shift();
 +        if (part_expr.length !=0){
 +            self.full_path_search(part_expr ,obj.child_id ,xpath_object,one_object);
 +        }else{
 +            if(obj){
 +                var level = obj.level+1;
 +                $.each(xpath_object, function(key, val) {
                      self.increase_level(val, level)
                  });
 -                var index = _.indexOf(p_list.child_id, val);
 -                if (position == "before") {
 -                    if (index != 0) { index--; }
 -                } else if (position == "after") {
 -                    index++;
 -                }
 -                p_list.child_id.splice(index, 0, xpath_object[0]);
 -                return_list.push(p_list.id);
 -            } else {
 -                if (val.child_id.length != 0) { p_list = val; }
 -                _.each(val.child_id, function(val, key) {
 -                   self.search_object(val, list, p_list, position, xpath_object, return_list);
 +                obj.child_id.push(xpath_object[0]);
 +            }else{
 +                $.each(one_object, function(key, val){
 +                    self.search_object(val, check_list, xpath_object);
 +                });
 +            }
 +        }
 +        return obj;
 +    },
 +
-     search_object: function(val ,list , xpath_object){
++    search_object : function(val ,list , xpath_object){
 +        var self = this;
 +        if(xpath_object.length != 0){
 +            var main_list = _.flatten(val.att_list);
 +            list = _.uniq(list);
 +            var insert = _.intersection(main_list,list);
 +            if(insert.length == list.length ){
 +                var level = val.level+1;
 +                $.each(xpath_object, function(key, val) {
 +                    self.increase_level(val, level)
 +                });
 +                val.child_id.push(xpath_object[0]);
 +                xpath_object.pop();
 +                return;
 +            }else{
 +                $.each(val.child_id, function(key, val) {
 +                   self.search_object(val, list, xpath_object);
                  });
              }
          }
 -        return return_list;
      },
-     
-     increase_level :function(val, level){
+     increase_level: function(val, level) {
          var self = this;
-         val.level = level; 
-         $.each(val.child_id, function(key, val) {
-             self.increase_level(val,level+1);
+         val.level = level;
+         _.each(val.child_id, function(val, key) {
+             self.increase_level(val, level + 1);
          });
      },
 +
      edit_view : function(one_object){
          var self = this;
          this.dialog = new openerp.web.Dialog(this,{
                  }
              }
          });
-     this.dialog.start().open();
-     this.dialog.$element.html(QWeb.render('view_editor', {
-        'data': one_object['main_object'],
-     }));
+         this.dialog.start().open();
+         this.dialog.$element.html(QWeb.render('view_editor', {
+             'data': one_object['main_object'],
+         }));
  
-     $("tr[id^='viewedit-']").click(function() {
-         $("tr[id^='viewedit-']").removeClass('ui-selected');
-         $(this).addClass('ui-selected');
-     });
+         $("tr[id^='viewedit-']").click(function() {
+             $("tr[id^='viewedit-']").removeClass('ui-selected');
+             $(this).addClass('ui-selected');
+         });
  
-     $("img[id^='parentimg-']").click(function() {
-         if ($(this).attr('src') == '/web/static/src/img/collapse.gif'){
-             $(this).attr('src', '/web/static/src/img/expand.gif');
-             self.on_expand(this);
-         }else{
-             $(this).attr('src', '/web/static/src/img/collapse.gif');
-             var id = this.id.split('-')[1];
-             self.on_collapse(this,one_object['parent_child_id'],one_object['main_object']);
-         }
-     });
-     $("img[id^='side-']").click(function() {
-         var side = $(this).closest("tr[id^='viewedit-']")
-         var id_tr = (side.attr('id')).split('-')[1];
-         var img = side.find("img[id='parentimg-"+id_tr+"']").attr('src'); ;
-         var level = side.attr('level');
-         var list_shift =[];
-         var last_tr;
-         var cur_tr = side;
-         list_shift.push(side);
-         var next_tr;
-         switch (this.id)
-         {
-             case "side-add":
-                 break;
-             case "side-remove":
-                 break;
-             case "side-edit":
-                 break;
-            case "side-up":
-                 while(1){
-                     var prev_tr = cur_tr.prev();
-                     if(level >= prev_tr.attr('level') || prev_tr.length==0){
-                        last_tr = prev_tr;
-                        break;
+         $("img[id^='parentimg-']").click(function() {
+             if ($(this).attr('src') == '/web/static/src/img/collapse.gif') {
+                 $(this).attr('src', '/web/static/src/img/expand.gif');
+                 self.on_expand(this);
+             } else {
+                 $(this).attr('src', '/web/static/src/img/collapse.gif');
+                 var id = this.id.split('-')[1];
+                 self.on_collapse(this,one_object['parent_child_id'], one_object['main_object']);
+             }
+         });
+         $("img[id^='side-']").click(function() {
+             var side = $(this).closest("tr[id^='viewedit-']")
+             var id_tr = (side.attr('id')).split('-')[1];
+             var img = side.find("img[id='parentimg-"+id_tr+"']").attr('src'); ;
+             var level = side.attr('level');
+             var list_shift =[];
+             var last_tr;
+             var cur_tr = side;
+             list_shift.push(side);
+             var next_tr;
+             switch (this.id) {
+                 case "side-add":
+                     break;
+                 case "side-remove":
+                     break;
+                 case "side-edit":
+                     break;
+                 case "side-up":
+                     while (1) {
+                         var prev_tr = cur_tr.prev();
+                         if(level >= prev_tr.attr('level') || prev_tr.length == 0) {
+                            last_tr = prev_tr;
+                            break;
+                         }
+                         cur_tr = prev_tr;
                      }
-                     cur_tr = prev_tr;
-                 }
-                 if(img){
-                     while(1){
-                         next_tr = side.next();
-                         if(next_tr.attr('level') <= level || next_tr.length==0){
+                     if (img) {
+                         while (1) {
+                             next_tr = side.next();
+                             if (next_tr.attr('level') <= level || next_tr.length == 0) {
+                                 break;
+                             } else {
+                                 list_shift.push(next_tr);
+                                 side = next_tr;
+                             }
+                         }
+                     }
+                     if (last_tr.length != 0 && last_tr.attr('level') == level) {
+                         _.each(list_shift, function(rec) {
+                              $(last_tr).before(rec);
+                         });
+                     }
+                 break;
+             case "side-down":
+                 if (img) {
+                     while (1) {
+                         next_tr = cur_tr.next();
+                         if (next_tr.attr('level') <= level || next_tr.length == 0) {
+                             last_tr = next_tr;
                              break;
-                         }else{
+                         } else {
                              list_shift.push(next_tr);
-                             side = next_tr;
-                         } 
-                     }
+                             cur_tr = next_tr;
+                         }
+                    }
                  }
-                 if(last_tr.length!=0 && last_tr.attr('level') == level){
-                     _.each(list_shift,function(rec){
-                          $(last_tr).before(rec); 
-                     });
+                 else {
+                     last_tr = cur_tr.next();
                  }
-             break;
-         case "side-down":
-             if(img){
-                 while(1){
-                     next_tr = cur_tr.next();
-                     if(next_tr.attr('level') <= level || next_tr.length==0){
-                         last_tr = next_tr;
-                     break;
-                     }else{
-                         list_shift.push(next_tr);
-                         cur_tr = next_tr;
-                     } 
-                }
-             }
-             else{
-                 last_tr = cur_tr.next();
-             }
-             if(last_tr.length != 0 && last_tr.attr('level')==level){
-                 var last_tr_id = (last_tr.attr('id')).split('-')[1];  
-                 img = last_tr.find("img[id='parentimg-"+last_tr_id+"']").attr('src');
-                 if(img){
-                     $("img[id='parentimg-"+last_tr_id+"']").attr('src', '/web/static/src/img/expand.gif');
-                     while(1){
-                         var next_tr = last_tr.next();
-                         if (next_tr.attr('level') <= level || next_tr.length==0){break;}
-                         next_tr.hide();
-                         last_tr = next_tr;
+                 if (last_tr.length != 0 && last_tr.attr('level') == level) {
+                     var last_tr_id = (last_tr.attr('id')).split('-')[1];
+                     img = last_tr.find("img[id='parentimg-" + last_tr_id + "']").attr('src');
+                     if (img) {
+                         $("img[id='parentimg-" + last_tr_id + "']").attr('src', '/web/static/src/img/expand.gif');
+                         while (1) {
+                             var next_tr = last_tr.next();
+                             if (next_tr.attr('level') <= level || next_tr.length == 0) break;
+                             next_tr.hide();
+                             last_tr = next_tr;
+                         }
                      }
+                     list_shift.reverse();
+                     _.each(list_shift, function(rec) {
+                        $(last_tr).after(rec);
+                     });
                  }
-                 list_shift.reverse();
-                 _.each(list_shift,function(rec){
-                    $(last_tr).after(rec); 
-                 });
+                 break;
              }
-             break;
-         }
-     });
+         });
      },
      on_expand: function(self){
 -        var level = $(self).closest("tr[id^='viewedit-']").attr('level');
 +        var level = parseInt($(self).closest("tr[id^='viewedit-']").attr('level'));
          var cur_tr = $(self).closest("tr[id^='viewedit-']");
-         while (1){
+         while (1) {
              var nxt_tr = cur_tr.next();
 -            if (nxt_tr.attr('level') > level) {
 +            if (parseInt(nxt_tr.attr('level')) > level){
                  cur_tr = nxt_tr;
                  nxt_tr.hide();
-             }else return nxt_tr;
+             } else return nxt_tr;
          }
      },
-     on_collapse: function(self,parent_child_id,id,main_object){
-         var id = parseInt(self.id.split('-')[1]);
-         var datas = _.detect(parent_child_id,function(res){
+     on_collapse: function(self, parent_child_id, id, main_object) {
+         var id = self.id.split('-')[1];
+         var datas = _.detect(parent_child_id,function(res) {
              return res.key == id;
          });
-         _.each(datas.value,function(rec){
+         _.each(datas.value, function(rec) {
              var tr = $("tr[id='viewedit-"+rec+"']");
              tr.find("img[id='parentimg-"+rec+"']").attr('src','/web/static/src/img/expand.gif');
              tr.show();