From e51b619b1dfe8c3fc1ba9fd33e5a3c05c88de1df Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 10 Oct 2011 18:14:52 +0530 Subject: [PATCH] [IMP]all type of xpath inherit completed bzr revid: vme@tinyerp.com-20111010124452-okzzpj9kyy9u51q3 --- addons/web/static/src/js/view_editor.js | 115 ++++++++++++++++-------- 1 file changed, 79 insertions(+), 36 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 32f25a01471..fb2e13fed74 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -65,7 +65,10 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ obj.child_id = []; obj.id = this.xml_id++; obj.level = level+1; + obj.att_list = []; var render_name = "<" + tag; + obj.att_list = []; + obj.att_list.push(tag); $(xml).each(function() { _.each(this.attributes, function(attrs){ if (tag != 'button') { @@ -75,7 +78,12 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ if (attrs.nodeName == "name") { render_name += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} } + if (attrs.nodeName != "position") { + obj.att_list.push([attrs.nodeName,attrs.nodeValue]); + } + }); + render_name+= ">"; }); obj.name = render_name; @@ -186,55 +194,90 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ _.each(xml_list , function(xml){ var parent_id; var check_list = []; - var position = $(xml).attr('position'); - if (xml.tagName.toLowerCase() == "xpath") { - var part_expr = _.without($(xml).attr('expr').split("/"),"");; - xpath_object = self.parse_xml(xml,result.id); - if (part_expr[part_expr.length-1].search("@")!=-1) { - check_list = $.trim(part_expr[part_expr.length-1].replace(/[^a-zA-Z 0-9 _]+/g,' ')).split(" "); - - }else{ - //search full path... - } - } else { - var xml_child = $(xml).children(); - check_list.push(xml.tagName.toLowerCase()); - if ($(root[0]).attr('name')){ - check_list.push($(root[0]).attr('name')); - check_list.push("name"); - } + 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); + }); } - $.each(one_object, function(key, val){ - self.search_object(val, check_list, xpath_object, []); - }); - }); }, - - search_object: function(val ,list , xpath_object, p_list){ + full_path_search: function(part_expr ,val ,xpath_object, one_object) { var self = this; - 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+1; + 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) - }); - val.child_id.push(xpath_object[0]); - return; + }); + obj.child_id.push(xpath_object[0]); }else{ - if ( val.child_id.length != 0) { p_list = val; } - $.each(val.child_id, function(key, val) { - self.search_object(val, list, xpath_object, p_list); + $.each(one_object, function(key, val){ + self.search_object(val, check_list, xpath_object); }); } } - + return obj; }, + 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); + }); + } + } + }, + increase_level :function(val, level){ var self = this; val.level = level;