From 5e07d121a63e959b22e0982a4473e9104c46d211 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 3 Oct 2011 15:19:31 +0530 Subject: [PATCH] [IMP]hide and show of inherited view and reduce code. bzr revid: vme@tinyerp.com-20111003094931-4jsh8rwmum4ak0z1 --- addons/web/static/src/js/view_editor.js | 67 ++++++++++++++----------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 46e83576eb2..2650f966c7e 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -143,7 +143,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ return {"main_object":main_object,"parent_child_id":parent_child_id}; }, - parse_xml :function(arch){ + parse_xml :function(arch,view_id){ var self = this; var root = $(arch).filter(":first")[0]; var tag = root.tagName.toLowerCase(); @@ -156,7 +156,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var view_id =(($("input[name='radiogroup']:checked").parent()).parent()).attr('data-id'); 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); + 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) { @@ -181,7 +181,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ xpath_list.push(root[0]); } _.each(xpath_list,function(element){ - var xpath_object = self.parse_xml(element); + var xpath_object = self.parse_xml(element,result.id); var expr = $(element).attr('expr'); var position = $(element).attr('position'); part_expr = expr.split("/"); @@ -192,39 +192,47 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } if(part_expr[part_expr.length-1].search("@")!=-1){ var part = part_expr[part_expr.length-1]; - var pp = $.trim(part.replace(/[^a-zA-Z 0-9 _]+/g,' ')).split(" "); + 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(key,val) { - self.search_object(val,pp,[],position,xpath_object['main_object']); + 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); + } + }); }); } }); }, - search_object:function(val,list,p_list,position,xpath_object){ + search_object:function(val,list,p_list,position,xpath_object,r_list){ var self = this; - var pp = $.trim(val.name.replace(/[^a-zA-Z 0-9 _]+/g,' ')).split(" "); - var insert = _.intersection(pp,list); - if(insert.length == list.length){ - var level = val.level; - $.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++; - } - var check = _.indexOf(p_list.child_id,xpath_object[0]); - if(check == -1){ + 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(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 val.id; + return_list.push(p_list.id); + }else{ + if(val.child_id.length!=0){p_list = val;} + $.each(val.child_id, function(key,val) { + self.search_object(val,list,p_list,position,xpath_object,return_list); + }); } - }else{ - if(val.child_id.length!=0){p_list = val;} - $.each(val.child_id, function(key,val) { - self.search_object(val,list,p_list,position,xpath_object); - }); } + return return_list; }, increase_level :function(val,level){ var self = this; @@ -268,7 +276,8 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ self.on_expand(this); }else{ $(this).attr('src', '/web/static/src/img/collapse.gif'); - self.on_collapse(this,one_object['parent_child_id']); + var id = this.id.split('-')[1]; + self.on_collapse(this,one_object['parent_child_id'],one_object['main_object']); } }); $("img[id^='side-']").click(function() { @@ -363,7 +372,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }else return nxt_tr; } }, - on_collapse: function(self,parent_child_id,id){ + 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;