diff options
| author | Vidhin Mehta (OpenERP) <vme@tinyerp.com> | 2011-10-10 18:14:52 +0530 |
|---|---|---|
| committer | Vidhin Mehta (OpenERP) <vme@tinyerp.com> | 2011-10-10 18:14:52 +0530 |
| commit | e51b619b1dfe8c3fc1ba9fd33e5a3c05c88de1df (patch) | |
| tree | 47e966cba0b66a54bbb068a7e9fd8331c8ba6b92 /addons/web/static/src/js/view_editor.js | |
| parent | 548b641acc38e822c60960c67fdf1cda003d8693 (diff) | |
[IMP]all type of xpath inherit completed
bzr revid: vme@tinyerp.com-20111010124452-okzzpj9kyy9u51q3
Diffstat (limited to 'addons/web/static/src/js/view_editor.js')
| -rw-r--r-- | addons/web/static/src/js/view_editor.js | 105 |
1 files changed, 74 insertions, 31 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... - } + 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 { - 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"); - } 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, []); - }); - }); }, + full_path_search: function(part_expr ,val ,xpath_object, one_object) { + var self = this; + 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) + }); + 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, p_list){ + search_object: function(val ,list , xpath_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){ + 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{ - 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); + self.search_object(val, list, xpath_object); }); } } - }, - + increase_level :function(val, level){ var self = this; val.level = level; |
