From e7888afb9dc03ce9d68eda47ec3de8d39de9633d Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 17 Oct 2011 18:51:16 +0530 Subject: [PATCH 1/7] [IMP]implement code for save and move functionality in view editor. bzr revid: vme@tinyerp.com-20111017132116-rntmapdk4g043gpa --- addons/web/static/src/js/view_editor.js | 41 ++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index d42470003b6..5fadfdaa289 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -95,7 +95,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var p_list = parent_list.slice(1); if (val.child_id.length != 0) { _.each(val.child_id, function(val, key) { - if (val.id==check_id) { + if (val.id == check_id) { if (p_list.length!=0) { self.save_object(val, p_list, child_obj_list); } else { @@ -144,18 +144,21 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ get_data: function() { var self = this; + var view_arch_list = []; 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,view_id); - one_object.arch = arch[0].arch; + view_arch_list.push({"view_id" : view_id, "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) { _.each(result, function(res) { + view_arch_list.push({"view_id":res.id,"arch":res.arch}); self.inherit_view(one_object, res); }); return self.edit_view({"main_object": one_object, - "parent_child_id": self.parent_child_list(one_object, [])}); + "parent_child_id": self.parent_child_list(one_object, []), + "arch": view_arch_list}); }); }); }, @@ -226,7 +229,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var main_list = _.flatten(element.att_list); return _.include(main_list, check[0]); }); - if(list_1 != 0){ + if(list_1.length != 0){ (check_list.length == 1)? obj = list_1[0] : check_list.shift(); } break; @@ -373,10 +376,39 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ $(last_tr).after(rec); }); } + var arch1 = one_object["arch"][0].arch; + root = $(arch1).filter(":first")[0]; + self.get_node(one_object["arch"][0].arch, + one_object['main_object'][0].child_id[0], + parseInt(id_tr), + one_object['main_object'][0].child_id[0].chld_id, level, one_object); break; } }); }, + get_node: function(arch, obj, id, child_list, level, one_object){ + var self = this; + var children_list = $(arch).children(); + if(obj.level <= level){ + if(id != obj.id){ + for(var i=0;i< children_list.length; i++){ + if(obj.child_id){var child_list = obj.child_id}; + + self.get_node(children_list[i], obj.child_id[i], id, child_list, level, one_object); + } + }else{ + var next = $(arch).next() + $(next).after(arch); + var index = _.indexOf(child_list,obj) + var re_insert_obj = child_list.splice(index,1); + child_list.splice(index+1, 0, re_insert_obj[0]); + var p = $(arch).parents(); + one_object["arch"][0].arch = p[p.length-1]; + utfstring = unescape(encodeURIComponent(p)); + return; + } + } + }, on_expand: function(self){ var level = parseInt($(self).closest("tr[id^='viewedit-']").attr('level')); var cur_tr = $(self).closest("tr[id^='viewedit-']"); @@ -390,6 +422,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }, 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; }); From ebcad72bcd72d83f077568ad51ef8727d9a0a2db Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 19 Oct 2011 15:20:44 +0530 Subject: [PATCH 2/7] [imp]implement code for xml saving and moving element of xml. bzr revid: vme@tinyerp.com-20111019095044-1z54rlklwlkvbsqq --- addons/web/static/src/js/view_editor.js | 41 +++++++++++++++---------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 5fadfdaa289..ccf0e4f75d6 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -301,7 +301,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } }); $("img[id^='side-']").click(function() { - var side = $(this).closest("tr[id^='viewedit-']") + 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'); @@ -376,38 +376,47 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ $(last_tr).after(rec); }); } + var arch1 = one_object["arch"][0].arch; root = $(arch1).filter(":first")[0]; self.get_node(one_object["arch"][0].arch, one_object['main_object'][0].child_id[0], parseInt(id_tr), - one_object['main_object'][0].child_id[0].chld_id, level, one_object); + one_object['main_object'][0].child_id[0].chld_id, level , + one_object["arch"][0].view_id); break; } }); }, - get_node: function(arch, obj, id, child_list, level, one_object){ + get_node: function(arch, obj, id, child_list, level, view_id){ var self = this; var children_list = $(arch).children(); if(obj.level <= level){ - if(id != obj.id){ + if(id == obj.id){ + var next = $(arch).next() + $(next).after(arch); + var parent = $(arch).parents(); + parent = parent[parent.length-1]; + var convert_to_utf = ""; + var s = new XMLSerializer(); + var stream = { + write : function(string) + {convert_to_utf = convert_to_utf + string + "";} + }; + s.serializeToStream(parent, stream, "UTF-8"); + convert_to_utf = convert_to_utf.replace('xmlns="http://www.w3.org/1999/xhtml"', ""); + convert_to_utf = '' + convert_to_utf; + dataset = new openerp.web.DataSet(this, 'ir.ui.view'); + dataset.write(parseInt(view_id),{"arch":convert_to_utf},function(r){ + }); + }else{ for(var i=0;i< children_list.length; i++){ if(obj.child_id){var child_list = obj.child_id}; - - self.get_node(children_list[i], obj.child_id[i], id, child_list, level, one_object); + self.get_node(children_list[i], obj.child_id[i], id, child_list, level, view_id); } - }else{ - var next = $(arch).next() - $(next).after(arch); - var index = _.indexOf(child_list,obj) - var re_insert_obj = child_list.splice(index,1); - child_list.splice(index+1, 0, re_insert_obj[0]); - var p = $(arch).parents(); - one_object["arch"][0].arch = p[p.length-1]; - utfstring = unescape(encodeURIComponent(p)); - return; } } + }, on_expand: function(self){ var level = parseInt($(self).closest("tr[id^='viewedit-']").attr('level')); From 0101378e100d6cdb6c9242c00caa01bd63d20db4 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Thu, 20 Oct 2011 18:47:27 +0530 Subject: [PATCH 3/7] [IMP]implement code for get view according to element moving from db. bzr revid: vme@tinyerp.com-20111020131727-ks0awx1z18g0ytf0 --- addons/web/static/src/js/view_editor.js | 110 +++++++++++++++--------- 1 file changed, 69 insertions(+), 41 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index ccf0e4f75d6..a645593f437 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -46,7 +46,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ //to do }, "Edit": function(){ - self.xml_id = 0 ; + self.xml_id=0; self.get_data(); }, "Close": function(){ @@ -80,9 +80,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ if (attrs.nodeName != "position") { obj.att_list.push( [attrs.nodeName,attrs.nodeValue] ); } - }); - render_name+= ">"; }); obj.name = render_name; @@ -109,7 +107,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } }, - xml_node_create: function(xml, root, parent_list, parent_id, main_object){ + xml_node_create: function(xml, root, parent_list, parent_id, main_object ){ var self = this; var child_obj_list = []; var children_list = $(xml).filter(root).children(); @@ -284,7 +282,6 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ 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'); @@ -304,12 +301,23 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ 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 level = parseInt(side.attr('level')); var list_shift =[]; var last_tr; var cur_tr = side; list_shift.push(side); var next_tr; + var ls = side; + var view_id; + var view_xml_id; + while(1){ + ls = ls.prev(); + if(($(ls).find('a').text()).search("view_id") != -1 && parseInt(ls.attr('level')) < level){ + view_id = parseInt(($(ls).find('a').text()).replace(/[^0-9]+/g,'')); + view_xml_id = (ls.attr('id')).split('-')[1]; + break; + } + } switch (this.id) { case "side-add": break; @@ -320,7 +328,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ case "side-up": while (1) { var prev_tr = cur_tr.prev(); - if(level >= prev_tr.attr('level') || prev_tr.length == 0) { + if(level >= parseInt(prev_tr.attr('level')) || prev_tr.length == 0) { last_tr = prev_tr; break; } @@ -329,7 +337,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ if (img) { while (1) { next_tr = side.next(); - if (next_tr.attr('level') <= level || next_tr.length == 0) { + if ( parseInt(next_tr.attr('level')) <= level || next_tr.length == 0) { break; } else { list_shift.push(next_tr); @@ -337,7 +345,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } } } - if (last_tr.length != 0 && last_tr.attr('level') == level) { + if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == level) { _.each(list_shift, function(rec) { $(last_tr).before(rec); }); @@ -347,7 +355,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ if (img) { while (1) { next_tr = cur_tr.next(); - if (next_tr.attr('level') <= level || next_tr.length == 0) { + if ( parseInt(next_tr.attr('level')) <= level || next_tr.length == 0) { last_tr = next_tr; break; } else { @@ -359,7 +367,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ else { last_tr = cur_tr.next(); } - if (last_tr.length != 0 && last_tr.attr('level') == level) { + if (last_tr.length != 0 && parseInt(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) { @@ -375,48 +383,69 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ _.each(list_shift, function(rec) { $(last_tr).after(rec); }); + self.save_move_arch(one_object, view_id, view_xml_id, id_tr, level); } - - var arch1 = one_object["arch"][0].arch; - root = $(arch1).filter(":first")[0]; - self.get_node(one_object["arch"][0].arch, - one_object['main_object'][0].child_id[0], - parseInt(id_tr), - one_object['main_object'][0].child_id[0].chld_id, level , - one_object["arch"][0].view_id); break; } }); }, - get_node: function(arch, obj, id, child_list, level, view_id){ + save_move_arch: function(one_object, view_id, view_xml_id, id_tr, level){ var self = this; - var children_list = $(arch).children(); - if(obj.level <= level){ - if(id == obj.id){ - var next = $(arch).next() - $(next).after(arch); - var parent = $(arch).parents(); - parent = parent[parent.length-1]; - var convert_to_utf = ""; - var s = new XMLSerializer(); - var stream = { - write : function(string) - {convert_to_utf = convert_to_utf + string + "";} - }; - s.serializeToStream(parent, stream, "UTF-8"); - convert_to_utf = convert_to_utf.replace('xmlns="http://www.w3.org/1999/xhtml"', ""); - convert_to_utf = '' + convert_to_utf; - dataset = new openerp.web.DataSet(this, 'ir.ui.view'); - dataset.write(parseInt(view_id),{"arch":convert_to_utf},function(r){ + var arch = _.detect(one_object['arch'],function(element){ + return element.view_id == view_id; + }); + var obj = self.get_view_object(view_xml_id, one_object['main_object'], []); + return self.get_node(arch.arch, obj[0].child_id[0], parseInt(id_tr), [], parseInt(level), + parseInt(view_id), arch); + }, + get_view_object: function(view_xml_id, one_object,result){ + var self = this; + if(result.length==0){ + var check = _.detect(one_object , function(obj){ + return view_xml_id==obj.id; }); + if(check){result.push(check);}; + _.each(one_object, function(obj){ + self.get_view_object(view_xml_id, obj.child_id, result); + }); + } + return result; + }, + get_node: function(arch1, obj, id, child_list, level, view_id, arch){ + var self = this; + console.log(obj.id,id); + var children_list = $(arch1).children(); + if(obj.level <= level){ + if(parseInt(id) == obj.id){ + var next = $(arch1).next() + $(next).after(arch1); + var parent = $(arch1).parents(); + console.log(id,"--------",obj.id); + console.log(next,"========",arch1); + parent = parent[parent.length-1]; + var convert_to_utf = ""; + var s = new XMLSerializer(); + var stream = { + write : function(string) + {convert_to_utf = convert_to_utf + string + "";} + }; + var index = _.indexOf(child_list,obj) + var re_insert_obj = child_list.splice(index,1); + child_list.splice(index+1, 0, re_insert_obj[0]); + s.serializeToStream(parent, stream, "UTF-8"); + convert_to_utf = convert_to_utf.replace('xmlns="http://www.w3.org/1999/xhtml"', ""); + convert_to_utf = '' + convert_to_utf; + arch.arch = convert_to_utf; + dataset = new openerp.web.DataSet(this, 'ir.ui.view'); + dataset.write(parseInt(view_id),{"arch":convert_to_utf},function(r){ + }); }else{ for(var i=0;i< children_list.length; i++){ if(obj.child_id){var child_list = obj.child_id}; - self.get_node(children_list[i], obj.child_id[i], id, child_list, level, view_id); + self.get_node(children_list[i], obj.child_id[i], id, child_list, level, view_id, arch); } } } - }, on_expand: function(self){ var level = parseInt($(self).closest("tr[id^='viewedit-']").attr('level')); @@ -431,7 +460,6 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }, 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; }); From 1ee677eadbfa3e4c7d9836c48bea735f41f6a5a7 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Tue, 25 Oct 2011 16:40:12 +0530 Subject: [PATCH 4/7] [IMP]implement save and move functionality with all type of views and tag. bzr revid: vme@tinyerp.com-20111025111012-o991yy8rm666yk91 --- addons/web/static/src/js/view_editor.js | 101 ++++++++++++++++-------- 1 file changed, 66 insertions(+), 35 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index a645593f437..29a3f083883 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -77,10 +77,8 @@ 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] ); - } - }); + obj.att_list.push( [attrs.nodeName,attrs.nodeValue] ); + }); render_name+= ">"; }); obj.name = render_name; @@ -189,7 +187,13 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ check_list.push(_.without($.trim(part.replace(/[^a-zA-Z 0-9 _]+/g,'!')).split("!"),"")); }); } else { - check_list = [_.flatten(xpath_object[0].child_id[0].att_list)]; + var temp = []; + _.each(xpath_object[0].child_id[0].att_list, function(list){ + if(!_.include(list, "position")){ + temp.push(list); + } + }); + check_list = [_.flatten(temp)]; } self.full_path_search(check_list ,one_object ,xpath_object); }); @@ -345,10 +349,13 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } } } - if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == level) { + if (last_tr.length != 0 + && parseInt(last_tr.attr('level')) == level + && ($(last_tr).find('a').text()).search("view_id") == -1) { _.each(list_shift, function(rec) { $(last_tr).before(rec); }); + self.save_move_arch(one_object, view_id, view_xml_id, id_tr, level, "up"); } break; case "side-down": @@ -379,25 +386,40 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ last_tr = next_tr; } } + list_shift.reverse(); - _.each(list_shift, function(rec) { - $(last_tr).after(rec); - }); - self.save_move_arch(one_object, view_id, view_xml_id, id_tr, level); + if(($(side.next()).find('a').text()).search("view_id") == -1){ + _.each(list_shift, function(rec) { + $(last_tr).after(rec); + }); + self.save_move_arch(one_object, view_id, view_xml_id, id_tr, level, "down"); + } } break; } }); }, - save_move_arch: function(one_object, view_id, view_xml_id, id_tr, level){ + + save_move_arch: function(one_object, view_id, view_xml_id, id_tr, level, move_direct){ var self = this; var arch = _.detect(one_object['arch'],function(element){ return element.view_id == view_id; }); var obj = self.get_view_object(view_xml_id, one_object['main_object'], []); + if(($(arch.arch).filter("data")).length != 0 && view_xml_id != 0){ + var check_list = _.flatten(obj[0].child_id[0].att_list); + arch.arch = _.detect($(arch.arch).children(), function(xml_child){ + var temp_obj = self.check_attr(xml_child, xml_child.tagName.toLowerCase()); + var main_list = _.flatten(temp_obj.att_list); + check_list = _.uniq(check_list); + var insert = _.intersection(main_list,check_list); + if(insert.length == check_list.length ){return xml_child;} + }); + } return self.get_node(arch.arch, obj[0].child_id[0], parseInt(id_tr), [], parseInt(level), - parseInt(view_id), arch); + parseInt(view_id), arch, move_direct); }, + get_view_object: function(view_xml_id, one_object,result){ var self = this; if(result.length==0){ @@ -411,42 +433,49 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } return result; }, - get_node: function(arch1, obj, id, child_list, level, view_id, arch){ + + get_node: function(arch1, obj, id, child_list, level, view_id, arch, move_direct){ var self = this; - console.log(obj.id,id); var children_list = $(arch1).children(); - if(obj.level <= level){ - if(parseInt(id) == obj.id){ - var next = $(arch1).next() - $(next).after(arch1); + var list_obj_xml = _.zip(children_list,obj.child_id); + if(id){ + if(obj.id == id){ + var id; var parent = $(arch1).parents(); - console.log(id,"--------",obj.id); - console.log(next,"========",arch1); - parent = parent[parent.length-1]; - var convert_to_utf = ""; - var s = new XMLSerializer(); - var stream = { - write : function(string) - {convert_to_utf = convert_to_utf + string + "";} - }; var index = _.indexOf(child_list,obj) var re_insert_obj = child_list.splice(index,1); - child_list.splice(index+1, 0, re_insert_obj[0]); - s.serializeToStream(parent, stream, "UTF-8"); + if(move_direct == "down"){ + var next = $(arch1).next(); + $(next).after(arch1); + child_list.splice(index+1, 0, re_insert_obj[0]); + }else{ + var prev = $(arch1).prev(); + $(prev).before(arch1); + child_list.splice(index-1, 0, re_insert_obj[0]); + } + parent = parent[parent.length-1]; + var convert_to_utf = ""; + var xml_serilalizer = new XMLSerializer(); + var stream = { + write : function(string) + {convert_to_utf = convert_to_utf + string + "";} + }; + xml_serilalizer.serializeToStream(parent, stream, "UTF-8"); convert_to_utf = convert_to_utf.replace('xmlns="http://www.w3.org/1999/xhtml"', ""); convert_to_utf = '' + convert_to_utf; arch.arch = convert_to_utf; dataset = new openerp.web.DataSet(this, 'ir.ui.view'); - dataset.write(parseInt(view_id),{"arch":convert_to_utf},function(r){ + dataset.write(parseInt(view_id),{"arch":convert_to_utf},function(r){ + }); + } + if(obj.level <= level){ + _.each(list_obj_xml, function(child_node){ + self.get_node(child_node[0], child_node[1], id, obj.child_id, level, view_id, arch, move_direct); }); - }else{ - for(var i=0;i< children_list.length; i++){ - if(obj.child_id){var child_list = obj.child_id}; - self.get_node(children_list[i], obj.child_id[i], id, child_list, level, view_id, arch); - } } } }, + on_expand: function(self){ var level = parseInt($(self).closest("tr[id^='viewedit-']").attr('level')); var cur_tr = $(self).closest("tr[id^='viewedit-']"); @@ -458,6 +487,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } else return nxt_tr; } }, + on_collapse: function(self, parent_child_id, id, main_object) { var id = self.id.split('-')[1]; var datas = _.detect(parent_child_id,function(res) { @@ -469,5 +499,6 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ tr.show(); }); } + }); }; From b70adac1285a7d49cd3ce5e839aa1b89037a9e14 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 31 Oct 2011 14:22:31 +0530 Subject: [PATCH 5/7] [Fix]fix browser issue of converting jquery dom to string. bzr revid: vme@tinyerp.com-20111031085231-kd32p1593xx1qxlt --- addons/web/static/src/js/view_editor.js | 47 ++++++++++++++++--------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 7828c4366c9..b92654ea42f 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -56,6 +56,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ this.view_edit_dialog.open(); action_manager.appendTo(this.view_edit_dialog); action_manager.do_action(action); + }, check_attr: function(xml, tag, level) { var obj = new Object(); @@ -307,7 +308,8 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var view_xml_id; while(1){ ls = ls.prev(); - if(($(ls).find('a').text()).search("view_id") != -1 && parseInt(ls.attr('level')) < level){ + if((self.edit_xml_dialog.$element.find(ls).find('a').text()).search("view_id") != -1 + && parseInt(ls.attr('level')) < level){ view_id = parseInt(($(ls).find('a').text()).replace(/[^0-9]+/g,'')); view_xml_id = (ls.attr('id')).split('-')[1]; break; @@ -342,7 +344,8 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == level - && ($(last_tr).find('a').text()).search("view_id") == -1) { + && + (self.edit_xml_dialog.$element.find(last_tr).find('a').text()).search("view_id") == -1) { _.each(list_shift, function(rec) { $(last_tr).before(rec); }); @@ -369,7 +372,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var last_tr_id = (last_tr.attr('id')).split('-')[1]; img = last_tr.find("img[id='parentimg-" + last_tr_id + "']").attr('src'); if (img) { - this.edit_xml_dialog.$element.find("img[id='parentimg-" + last_tr_id + "']").attr('src', '/web/static/src/img/expand.gif'); + self.edit_xml_dialog.$element.find("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; @@ -379,7 +382,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } list_shift.reverse(); - if(($(side.next()).find('a').text()).search("view_id") == -1){ + if((self.edit_xml_dialog.$element.find(side.next()).find('a').text()).search("view_id") == -1){ _.each(list_shift, function(rec) { $(last_tr).after(rec); }); @@ -444,19 +447,15 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ child_list.splice(index-1, 0, re_insert_obj[0]); } parent = parent[parent.length-1]; - var convert_to_utf = ""; - var xml_serilalizer = new XMLSerializer(); - var stream = { - write : function(string) - {convert_to_utf = convert_to_utf + string + "";} - }; - xml_serilalizer.serializeToStream(parent, stream, "UTF-8"); - convert_to_utf = convert_to_utf.replace('xmlns="http://www.w3.org/1999/xhtml"', ""); - convert_to_utf = '' + convert_to_utf; - arch.arch = convert_to_utf; - dataset = new openerp.web.DataSet(this, 'ir.ui.view'); - dataset.write(parseInt(view_id),{"arch":convert_to_utf},function(r){ - }); + var convert_to_utf = self.xml2Str(parent); + if(convert_to_utf){ + convert_to_utf = convert_to_utf.replace('xmlns="http://www.w3.org/1999/xhtml"', ""); + convert_to_utf = '' + convert_to_utf; + arch.arch = convert_to_utf; + dataset = new openerp.web.DataSet(this, 'ir.ui.view'); + dataset.write(parseInt(view_id),{"arch":convert_to_utf},function(r){ + }); + } } if(obj.level <= level){ _.each(list_obj_xml, function(child_node){ @@ -465,6 +464,20 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } } }, + xml2Str: function(xmlNode) { + try { + return (new XMLSerializer()).serializeToString(xmlNode); + } + catch (e) { + try { + return xmlNode.xml; + } + catch (e) { + return false; + } + } + + }, on_expand: function(expand_img){ var level = parseInt($(expand_img).closest("tr[id^='viewedit-']").attr('level')); From c1a65b4970a93c30488aa4df14d0ebf36e3a86aa Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 2 Nov 2011 10:52:29 +0530 Subject: [PATCH 6/7] [IMP]removed direct use of jquery. bzr revid: vme@tinyerp.com-20111102052229-kyld21aha689n9p0 --- addons/web/static/src/js/view_editor.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index b92654ea42f..98804f5c03d 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -280,7 +280,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ 'data': one_object['main_object'], })); this.edit_xml_dialog.$element.find("tr[id^='viewedit-']").click(function() { - $("tr[id^='viewedit-']").removeClass('ui-selected'); + self.edit_xml_dialog.$element.find("tr[id^='viewedit-']").removeClass('ui-selected'); $(this).addClass('ui-selected'); }); this.edit_xml_dialog.$element.find("img[id^='parentimg-']").click(function() { @@ -372,7 +372,8 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var last_tr_id = (last_tr.attr('id')).split('-')[1]; img = last_tr.find("img[id='parentimg-" + last_tr_id + "']").attr('src'); if (img) { - self.edit_xml_dialog.$element.find("img[id='parentimg-" + last_tr_id + "']").attr('src', '/web/static/src/img/expand.gif'); + self.edit_xml_dialog.$element.find("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; From 6159ab1714c9a171f1d7eda20f8503ae85e26f35 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 2 Nov 2011 11:47:35 +0530 Subject: [PATCH 7/7] [IMP]impove save and move funcationality. bzr revid: vme@tinyerp.com-20111102061735-28mlg6y4qrvdku4g --- addons/web/static/src/js/view_editor.js | 30 +++++++++++-------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 98804f5c03d..f41b77f1744 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -33,7 +33,6 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ radio:true }, }; - var action_manager = new openerp.web.ActionManager(this); this.view_edit_dialog = new openerp.web.Dialog(this,{ modal: true, title: 'ViewEditor', @@ -52,28 +51,23 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } }, }); - this.view_edit_dialog.start(); - this.view_edit_dialog.open(); + this.view_edit_dialog.start().open(); + var action_manager = new openerp.web.ActionManager(this); action_manager.appendTo(this.view_edit_dialog); action_manager.do_action(action); - }, check_attr: function(xml, tag, level) { - var obj = new Object(); - obj.child_id = []; - obj.id = this.xml_id++; - obj.level = level+1; + var obj = {'child_id':[],'id':this.xml_id++,'level':level+1,'att_list':[],'name':""}; var render_name = "<" + tag; - obj.att_list = []; obj.att_list.push(tag); $(xml).each(function() { _.each(this.attributes, function(attrs){ if (tag != 'button') { if (attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index") { - render_name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"' ; } + render_name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"' ;} } else { if (attrs.nodeName == "name") { - render_name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"'; } + render_name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"';} } obj.att_list.push( [attrs.nodeName,attrs.nodeValue] ); }); @@ -368,6 +362,9 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ else { last_tr = cur_tr.next(); } + if((self.edit_xml_dialog.$element.find(last_tr).find('a').text()).search("view_id") != -1){ + return; + } if (last_tr.length != 0 && parseInt(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'); @@ -383,12 +380,11 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } list_shift.reverse(); - if((self.edit_xml_dialog.$element.find(side.next()).find('a').text()).search("view_id") == -1){ - _.each(list_shift, function(rec) { - $(last_tr).after(rec); - }); - self.save_move_arch(one_object, view_id, view_xml_id, id_tr, level, "down"); - } + _.each(list_shift, function(rec) { + $(last_tr).after(rec); + }); + self.save_move_arch(one_object, view_id, view_xml_id, id_tr, level, "down"); + } break; }