From a7104a123b70c8ef19f5dff191ef34f2c8be01c4 Mon Sep 17 00:00:00 2001 From: "sma (Tiny)" Date: Tue, 23 Aug 2011 16:09:41 +0530 Subject: [PATCH 01/45] [ADD] vieweditor. bzr revid: sma@tinyerp.com-20110823103941-g2qq9dee248di0re --- addons/base/__openerp__.py | 1 + addons/base/static/src/js/boot.js | 2 +- addons/base/static/src/js/view_editor.js | 19 +++++++++++++++++++ addons/base/static/src/js/views.js | 4 +++- 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 addons/base/static/src/js/view_editor.js diff --git a/addons/base/__openerp__.py b/addons/base/__openerp__.py index f9786e9867f..9c1124a108e 100644 --- a/addons/base/__openerp__.py +++ b/addons/base/__openerp__.py @@ -38,6 +38,7 @@ "static/src/js/list-editable.js", "static/src/js/search.js", "static/src/js/view_tree.js", + "static/src/js/view_editor.js" ], 'css' : [ "static/lib/jquery.superfish/css/superfish.css", diff --git a/addons/base/static/src/js/boot.js b/addons/base/static/src/js/boot.js index fff710a1d68..0dd8dcdc980 100644 --- a/addons/base/static/src/js/boot.js +++ b/addons/base/static/src/js/boot.js @@ -54,7 +54,7 @@ openerp.base = function(instance) { openerp.base.formats(instance); openerp.base.chrome(instance); openerp.base.data(instance); - files = ["views","search","list","form","list_editable","web_mobile","view_tree","data_export"]; + files = ["views","search","list","form","list_editable","web_mobile","view_tree","data_export","view_editor"]; for(i=0; i' + openerp.base.json_node_to_xml(this.fields_view.arch, true) + '').dialog({ width: '95%', height: 600}); +// $('' + openerp.base.json_node_to_xml(this.fields_view.arch, true) + '').dialog({ width: '95%', height: 600}); + var view_editor = new openerp.base.ViewEditor(this, this.$element, this.dataset, this.fields_view.arch) + view_editor.start(); } else { this.notification.warn("Manage Views", "Could not find current view declaration"); } From f48a5ab9997c6ff8028d4d828d9f76c18437f422 Mon Sep 17 00:00:00 2001 From: "sma (Tiny)" Date: Tue, 23 Aug 2011 16:10:54 +0530 Subject: [PATCH 02/45] [IMP] Add listview action. bzr revid: sma@tinyerp.com-20110823104054-vvme3sgbsoepcxxw --- addons/base/static/src/js/view_editor.js | 39 ++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/addons/base/static/src/js/view_editor.js b/addons/base/static/src/js/view_editor.js index 742203500c8..4e707eb25f1 100644 --- a/addons/base/static/src/js/view_editor.js +++ b/addons/base/static/src/js/view_editor.js @@ -13,7 +13,46 @@ openerp.base.ViewEditor = openerp.base.Dialog.extend({ start: function() { var self = this; + var action = { + name:'ViewEditor', + context:this.session.user_context, +// domain: ["model", "=", this.dataset.model], + res_model: 'ir.ui.view', + views : [[false, 'list']], + type: 'ir.actions.act_window', + target: "current", + limit : 80, + auto_search : true, + flags: { + sidebar: false, + views_switcher: false, + action_buttons:false, + search_view:false, + pager:false, + }, + }; + var action_manager = new openerp.base.ActionManager(this); + this.dialog = new openerp.base.Dialog(this,{ + modal: true, + title: 'ViewEditor', + width: 600, + height: 500, + buttons: { + Cancel: function(){ + $(this).dialog('destroy'); + }, + Edit: function(){ + }, + Create: function(){ + } + }, + }); + this.dialog.start(); + this.dialog.open(); + action_manager.appendTo(this.dialog); + action_manager.render(this.dialog); + action_manager.do_action(action); }, }); }; From 1a1808d7530e8384a3d908ebe35ba8d5a41b2941 Mon Sep 17 00:00:00 2001 From: "sma (Tiny)" Date: Thu, 25 Aug 2011 13:10:03 +0530 Subject: [PATCH 03/45] [FIX] load all js files. bzr revid: sma@tinyerp.com-20110825074003-5m5jo850inuwp8xl --- addons/base/static/src/js/core.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/base/static/src/js/core.js b/addons/base/static/src/js/core.js index fca993ffef9..e872ced1f0d 100644 --- a/addons/base/static/src/js/core.js +++ b/addons/base/static/src/js/core.js @@ -596,7 +596,8 @@ openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.b tag.onload_done = true; self.do_load_js(files); }; - document.head.appendChild(tag); + $('head').append(tag); + self.do_load_js(files); } else { this.on_modules_loaded(); } From ce3c9f0e7b2fddcffe88383d26a901d9d85c84a1 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 31 Aug 2011 16:30:36 +0530 Subject: [PATCH 04/45] [imp]domain applied. bzr revid: vme@tinyerp.com-20110831110036-af1ioiqeh6qz1wqm --- addons/base/static/src/js/view_editor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/src/js/view_editor.js b/addons/base/static/src/js/view_editor.js index 4e707eb25f1..0bdfc6df87f 100644 --- a/addons/base/static/src/js/view_editor.js +++ b/addons/base/static/src/js/view_editor.js @@ -16,7 +16,7 @@ openerp.base.ViewEditor = openerp.base.Dialog.extend({ var action = { name:'ViewEditor', context:this.session.user_context, -// domain: ["model", "=", this.dataset.model], + domain: [["model", "=", this.dataset.model]], res_model: 'ir.ui.view', views : [[false, 'list']], type: 'ir.actions.act_window', From c7d4e3d73d3ee294ec963532bf68380f93d553ad Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 5 Sep 2011 18:02:36 +0530 Subject: [PATCH 05/45] [fix]manage view error after closing it. bzr revid: vme@tinyerp.com-20110905123236-2a4ow4z9yq3egsql --- addons/base/static/src/js/view_editor.js | 45 ++++++++++++++++++------ addons/base/static/src/xml/base.xml | 15 ++++++-- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/addons/base/static/src/js/view_editor.js b/addons/base/static/src/js/view_editor.js index 0bdfc6df87f..dd1dd0a93b1 100644 --- a/addons/base/static/src/js/view_editor.js +++ b/addons/base/static/src/js/view_editor.js @@ -1,13 +1,11 @@ openerp.base.view_editor = function(openerp) { -openerp.base.ViewEditor = openerp.base.Dialog.extend({ +openerp.base.ViewEditor = openerp.base.Widget.extend({ init: function(parent, element_id, dataset, view, options) { this._super(parent); - self.template = 'ViewEditor'; this.element_id = element_id this.parent = parent this.dataset = dataset; this.model = dataset.model; - this.fields_views = view; }, start: function() { @@ -29,30 +27,57 @@ openerp.base.ViewEditor = openerp.base.Dialog.extend({ action_buttons:false, search_view:false, pager:false, + radio:true }, }; var action_manager = new openerp.base.ActionManager(this); this.dialog = new openerp.base.Dialog(this,{ modal: true, title: 'ViewEditor', - width: 600, + width: 750, height: 500, buttons: { - - Cancel: function(){ + "Create": function(){ $(this).dialog('destroy'); }, - Edit: function(){ + "Edit": function(){ + self.Edit_view(); }, - Create: function(){ + " Close": function(){ } }, + }); - this.dialog.start(); + this.dialog.start(); this.dialog.open(); action_manager.appendTo(this.dialog); - action_manager.render(this.dialog); action_manager.do_action(action); }, + + Edit_view : function(){ + + this.dialog = new openerp.base.Dialog(this,{ + modal: true, + title: 'Edit Xml', + width: 750, + height: 500, + buttons: { + "Inherited View": function(){ + + }, + "Preview": function(){ + + }, + "Close": function(){ + $(this).dialog('destroy'); + + } + }, + + }); + this.dialog.start().open(); + + } + }); }; diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index c6bd9a1ee19..174eda0789a 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -602,9 +602,18 @@ - - - + + + + + + + + + + + + Date: Tue, 13 Sep 2011 18:58:29 +0530 Subject: [PATCH 06/45] [imp]creating object for xml to display tree view in manage view. bzr revid: vme@tinyerp.com-20110913132829-qc033f3uwy7a422u --- addons/base/static/src/js/view_editor.js | 84 +++++++++++++++++++++--- addons/base/static/src/xml/base.xml | 2 +- 2 files changed, 75 insertions(+), 11 deletions(-) diff --git a/addons/base/static/src/js/view_editor.js b/addons/base/static/src/js/view_editor.js index dd1dd0a93b1..753f9ac6d4e 100644 --- a/addons/base/static/src/js/view_editor.js +++ b/addons/base/static/src/js/view_editor.js @@ -6,10 +6,12 @@ openerp.base.ViewEditor = openerp.base.Widget.extend({ this.parent = parent this.dataset = dataset; this.model = dataset.model; - this.fields_views = view; + this.xml_id = 0; }, start: function() { - + this.View_editor(); + }, + View_editor : function(){ var self = this; var action = { name:'ViewEditor', @@ -38,12 +40,14 @@ openerp.base.ViewEditor = openerp.base.Widget.extend({ height: 500, buttons: { "Create": function(){ - $(this).dialog('destroy'); + }, "Edit": function(){ - self.Edit_view(); + self.xml_id=0; + self.edit_view(); }, - " Close": function(){ + "Close": function(){ + $(this).dialog('destroy'); } }, @@ -52,10 +56,72 @@ openerp.base.ViewEditor = openerp.base.Widget.extend({ this.dialog.open(); action_manager.appendTo(this.dialog); action_manager.do_action(action); - }, - Edit_view : function(){ - + + }, + check_attr:function(xml,tag){ + var obj = new Object(); + obj.child_id = []; + obj.id = this.xml_id++; + var att_list = []; + var name1 = "<" + tag; + $(xml).each(function() { + att_list = this.attributes; + att_list = _.select(att_list, function(attrs){ + if(attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index"){ + name1 += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} + }); + name1+= ">"; + }); + obj.name = name1; + return obj; + }, + recursiveFunction : function(main_object,parent_id,child_id){ + var self = this; + var check = false; + var main_object = _.detect(main_object , function(node){ + if(node.id == parent_id){ + node.child_id = child_id; + check = true; + } + return main_object; + }); + if(check){ + return main_object; + }else{ + //todo recursion for saving object into objects + } + }, + children_function : function(xml,root,main_object,parent_id){ + var self = this; + var child_obj_list = []; + var main_object = main_object; + var children_list = $(xml).filter(root).children(); + _.each(children_list, function(child_node){ + var string = self.check_attr(child_node,child_node.tagName.toLowerCase()); + child_obj_list.push(string); + }); + if(children_list.length != 0){ + main_object = self.recursiveFunction(main_object,parent_id,child_obj_list); + } + for(var i=0;i - + From 972e0ff71cc881683e9d6a27a9504c946f840f53 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Thu, 15 Sep 2011 17:58:37 +0530 Subject: [PATCH 07/45] [imp]improve code for creating object of xml for tree view. bzr revid: vme@tinyerp.com-20110915122837-4v344b0g0lsrq9u9 --- addons/web/static/src/js/view_editor.js | 58 +++++++++++++++---------- addons/web/static/src/js/views.js | 2 +- 2 files changed, 35 insertions(+), 25 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 22800facf9b..c2d8404a2dd 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -1,5 +1,6 @@ openerp.web.view_editor = function(openerp) { -openerp.web.ViewEditor = openerp.web.Widget.extend({ +var QWeb = openerp.web.qweb; +openerp.web.ViewEditor = openerp.web.Widget.extend({ init: function(parent, element_id, dataset, view, options) { this._super(parent); this.element_id = element_id @@ -56,8 +57,6 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ this.dialog.open(); action_manager.appendTo(this.dialog); action_manager.do_action(action); - - }, check_attr:function(xml,tag){ var obj = new Object(); @@ -76,25 +75,29 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ obj.name = name1; return obj; }, - recursiveFunction : function(main_object,parent_id,child_id){ + save_object : function(val,parent_list,child_obj_list){ var self = this; - var check = false; - var main_object = _.detect(main_object , function(node){ - if(node.id == parent_id){ - node.child_id = child_id; - check = true; - } - return main_object; - }); - if(check){ - return main_object; - }else{ - //todo recursion for saving object into objects + var check_id = parent_list[0]; + var p_list = parent_list.slice(1); + if(val.child_id.length != 0){ + $.each(val.child_id, function(key,val) { + if(val.id==check_id){ + if(p_list.length!=0){ + self.save_object(val,p_list,child_obj_list); + }else{ + val.child_id = child_obj_list; + return; + } + } + }); + }else{ + val.child_id = child_obj_list; } }, - children_function : function(xml,root,main_object,parent_id){ + children_function : function(xml,root,parent_list,parent_id,main_object){ var self = this; var child_obj_list = []; + var parent_list = parent_list; var main_object = main_object; var children_list = $(xml).filter(root).children(); _.each(children_list, function(child_node){ @@ -102,15 +105,23 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ child_obj_list.push(string); }); if(children_list.length != 0){ - main_object = self.recursiveFunction(main_object,parent_id,child_obj_list); + var parents = $(children_list[0]).parents().get(); + if(parents.length <= parent_list.length){ + parent_list.splice(parents.length-1);} + parent_list.push(parent_id); + $.each(main_object, function(key,val) { + self.save_object(val,parent_list.slice(1),child_obj_list); + }); } for(var i=0;i' + openerp.base.json_node_to_xml(this.fields_view.arch, true) + '').dialog({ width: '95%', height: 600}); - var view_editor = new openerp.base.ViewEditor(this, this.$element, this.dataset, this.fields_view.arch) + var view_editor = new openerp.web.ViewEditor(this, this.$element, this.dataset, this.fields_view.arch) view_editor.start(); } else { this.notification.warn("Manage Views", "Could not find current view declaration"); From 28a13263c9c109d4a2c04831291308992b0b4c6e Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Fri, 16 Sep 2011 18:54:11 +0530 Subject: [PATCH 08/45] [imp]render object of xml in view editor with all data. bzr revid: vme@tinyerp.com-20110916132411-4o787cega0nnxr33 --- addons/web/static/src/css/base.css | 3 + addons/web/static/src/js/view_editor.js | 75 ++++++++++++++----------- addons/web/static/src/xml/base.xml | 23 ++++++++ 3 files changed, 69 insertions(+), 32 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index cc8b596e6f5..2cdeb9e89d5 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1315,3 +1315,6 @@ ul.oe-arrow-list li.oe-arrow-list-selected .oe-arrow-list-after { border-color: rgba(0,0,0,0); border-left-color: #CFCCCC; } +.openerp .view_editor{ + border-bottom: 1px solid #CFCCCC; +} diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index c2d8404a2dd..28b13aa1930 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -44,8 +44,9 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }, "Edit": function(){ - self.xml_id=0; - self.edit_view(); + self.xml_id = 0 ; + self.get_data(); + }, "Close": function(){ $(this).dialog('destroy'); @@ -58,10 +59,12 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ action_manager.appendTo(this.dialog); action_manager.do_action(action); }, - check_attr:function(xml,tag){ + + check_attr:function(xml,tag,level){ var obj = new Object(); obj.child_id = []; obj.id = this.xml_id++; + obj.level = level; var att_list = []; var name1 = "<" + tag; $(xml).each(function() { @@ -75,6 +78,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ obj.name = name1; return obj; }, + save_object : function(val,parent_list,child_obj_list){ var self = this; var check_id = parent_list[0]; @@ -94,14 +98,16 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ val.child_id = child_obj_list; } }, + children_function : function(xml,root,parent_list,parent_id,main_object){ var self = this; var child_obj_list = []; 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){ - var string = self.check_attr(child_node,child_node.tagName.toLowerCase()); + var string = self.check_attr(child_node,child_node.tagName.toLowerCase(),parents.length); child_obj_list.push(string); }); if(children_list.length != 0){ @@ -115,42 +121,47 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } for(var i=0;i + + + +
+
+ + + + + + + + + + + + + + + + Export @@ -1295,6 +1317,7 @@ + From e34c9b01a50c4377982986c1d0cdecb9e87121ef Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 19 Sep 2011 12:35:59 +0530 Subject: [PATCH 09/45] [FIX]Rename openerp to db. bzr revid: vme@tinyerp.com-20110919070559-l703ghrpnv4bmehn --- addons/web/static/src/js/views.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 5f06297cbbb..fa27e59c0af 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -850,7 +850,7 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ }, on_sidebar_manage_view: function() { if (this.fields_view && this.fields_view.arch) { - var view_editor = new openerp.web.ViewEditor(this, this.$element, this.dataset, this.fields_view.arch); + var view_editor = new db.web.ViewEditor(this, this.$element, this.dataset, this.fields_view.arch); view_editor.start(); } else { this.notification.warn("Manage Views", "Could not find current view declaration"); From e0724b4c339b1da080cea7d8dc5e3b671fd07701 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Tue, 20 Sep 2011 18:13:02 +0530 Subject: [PATCH 10/45] [IMP]improve code for edit dialog box in manager view. bzr revid: vme@tinyerp.com-20110920124302-0nxmhgb0u6tomi37 --- addons/web/static/src/css/base.css | 10 ++++-- addons/web/static/src/js/view_editor.js | 29 ++++++++++++++--- addons/web/static/src/xml/base.xml | 41 ++++++++++++++++--------- 3 files changed, 58 insertions(+), 22 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index a66bb20d8de..5d4da8175dd 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1369,6 +1369,12 @@ ul.oe-arrow-list li.oe-arrow-list-selected .oe-arrow-list-after { border-color: rgba(0,0,0,0); border-left-color: #CFCCCC; } -.openerp .view_editor{ - border-bottom: 1px solid #CFCCCC; +.openerp .view_editor{ + font-size: 90%; + font-weight: normal; + height : 10%; + padding: 0; + border-bottom: 1px solid #CFCCCC; } + + diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 28b13aa1930..6f9fd059066 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -70,9 +70,14 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ $(xml).each(function() { att_list = this.attributes; att_list = _.select(att_list, function(attrs){ - if(attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index"){ - name1 += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} - }); + if (tag != 'button'){ + if(attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index"){ + name1 += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} + }else{ + if(attrs.nodeName == "name"){ + name1 += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} + } + }); name1+= ">"; }); obj.name = name1; @@ -138,7 +143,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ return self.edit_view(one_object); }); }, - edit_view : function(o){ + edit_view : function(one_object){ var self = this; this.dialog = new openerp.web.Dialog(this,{ modal: true, @@ -160,9 +165,23 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ this.dialog.start().open(); this.dialog.$element.html(QWeb.render('view_editor', { - 'data': o, + 'data': one_object, })); + + $("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'); + }else{ + $(this).attr('src', '/web/static/src/img/collapse.gif'); + } + }); } + }); }; diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 6251b5ba339..5f91ab46047 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1263,28 +1263,39 @@ -
+
- - - - - - - - - + + + + + + + +
+ + + +
+ + + + + + + + + + +
+ - - - - + Export From f6a7de7e113222186c4ef712f3936f4247fc5908 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Tue, 20 Sep 2011 19:09:11 +0530 Subject: [PATCH 11/45] [IMP]created object key,value for parent,child. bzr revid: vme@tinyerp.com-20110920133911-7jcdqs6sdcwl7bvk --- addons/web/static/src/js/view_editor.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 6f9fd059066..f5f1766b119 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -104,9 +104,10 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } }, - children_function : function(xml,root,parent_list,parent_id,main_object){ + children_function : function(xml,root,parent_list,parent_id,main_object,parent_child_id){ 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(); @@ -116,6 +117,8 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ child_obj_list.push(string); }); if(children_list.length != 0){ + parent_child_id.push({key: parent_id, value: child_obj_list}); + var parents = $(children_list[0]).parents().get(); if(parents.length <= parent_list.length){ parent_list.splice(parents.length-1);} @@ -126,11 +129,12 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } for(var i=0;i Date: Thu, 22 Sep 2011 14:30:27 +0530 Subject: [PATCH 12/45] [IMP]Implement code for show-hide child node in tree view. bzr revid: kch@tinyerp.com-20110922090027-9eku05pk3okq26hh --- addons/web/static/src/js/view_editor.js | 111 ++++++++++++++---------- addons/web/static/src/xml/base.xml | 11 +-- 2 files changed, 72 insertions(+), 50 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index f5f1766b119..c86f9993856 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -41,12 +41,12 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ height: 500, buttons: { "Create": function(){ - + }, "Edit": function(){ self.xml_id = 0 ; self.get_data(); - + }, "Close": function(){ $(this).dialog('destroy'); @@ -54,7 +54,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }, }); - this.dialog.start(); + this.dialog.start(); this.dialog.open(); action_manager.appendTo(this.dialog); action_manager.do_action(action); @@ -72,14 +72,14 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ att_list = _.select(att_list, function(attrs){ if (tag != 'button'){ if(attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index"){ - name1 += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} + name1 += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} }else{ if(attrs.nodeName == "name"){ - name1 += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} + name1 += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} } - }); + }); name1+= ">"; - }); + }); obj.name = name1; return obj; }, @@ -117,14 +117,14 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ child_obj_list.push(string); }); if(children_list.length != 0){ - parent_child_id.push({key: parent_id, value: child_obj_list}); - + 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.push(parent_id); $.each(main_object, function(key,val) { - self.save_object(val,parent_list.slice(1),child_obj_list); + self.save_object(val,parent_list.slice(1),child_obj_list); }); } for(var i=0;i level){ + cur_tr = nxt_tr; + nxt_tr.hide(); + }else break; + } + }, + on_collapse: function(self,parent_child_id){ + var id = self.id.split('-')[1]; + var datas = _.detect(parent_child_id,function(res){ + return res.key == id; + }); + _.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(); + }); + } }); }; diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 5f91ab46047..a0b4505155a 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -640,8 +640,8 @@
- - + + - - + +
@@ -1280,7 +1280,7 @@
- + @@ -1296,6 +1296,7 @@ + Export From 3e11ca62990fde34e537e233e3b099d22f8c8373 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Thu, 22 Sep 2011 15:15:13 +0530 Subject: [PATCH 13/45] [IMP]implement code for side images in view editor and up-down tag. bzr revid: vme@tinyerp.com-20110922094513-bhvlvfm9q5bw9dq9 --- addons/web/static/src/js/view_editor.js | 25 +++++++++++++++++++++ addons/web/static/src/xml/base.xml | 29 +++++++++++++++++-------- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index c86f9993856..7f1ac017ff3 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -116,6 +116,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ 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}); @@ -184,6 +185,30 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ self.on_collapse(this,one_object['parent_child_id']); } }); + $("img[id^='side-']").click(function() { + var side = $(this).closest("'tr[id^='viewedit-']'"); + switch (this.id) + { + case "side-add": + break; + case "side-remove": + break; + case "side-edit": + break; + case "side-up": + if(side.prev().attr('level') == side.attr('level')){ + console.log(); + $(side.prev()).before(side); + } + break; + case "side-down": + if(side.next().attr('level') == side.attr('level')){ + var v = side.next().next().attr('level') + $(side.next()).after(side); + } + break; + } + }); }, on_expand: function(self){ var level = $(self).closest("tr[id^='viewedit-']").attr('level'); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index a0b4505155a..4d4efbed2a3 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1267,12 +1267,13 @@
- - + +
- + @@ -1280,14 +1281,24 @@
- + - - - - - + + + + +
+ + + + + + + + + +
From d558fa620e175dced3ba29f946dda4663aad61fb Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Fri, 23 Sep 2011 18:34:06 +0530 Subject: [PATCH 14/45] [IMP]include main xml tag in main_object for up down posisition of node. bzr revid: vme@tinyerp.com-20110923130406-3h1r41v6z768zkqt --- addons/web/static/src/js/view_editor.js | 29 ++++++++++++++++++------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 7f1ac017ff3..824227174ef 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -65,11 +65,14 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ obj.child_id = []; obj.id = this.xml_id++; obj.level = level; + var vidhin = xml; var att_list = []; var name1 = "<" + tag; + var xml_tag = "<" + tag; $(xml).each(function() { att_list = this.attributes; att_list = _.select(att_list, function(attrs){ + xml_tag += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"'; if (tag != 'button'){ if(attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index"){ name1 += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} @@ -79,7 +82,9 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } }); name1+= ">"; + xml_tag+= ">"; }); + obj.main_xml = xml_tag; obj.name = name1; return obj; }, @@ -134,17 +139,24 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } return {"main_object":main_object,"parent_child_id":parent_child_id}; }, + parse_xml :function(arch){ + var self = this; + var root = $(arch).filter(":first")[0]; + var tag = root.tagName.toLowerCase(); + var root_object = self.check_attr(root,tag,0); + var one_object = self.children_function(arch,tag,[],0,[root_object],[]); + return self.edit_view(one_object); + }, get_data : function(){ var self = this; var view_id =(($("input[name='radiogroup']:checked").parent()).parent()).attr('data-id'); + dataset = new openerp.web.DataSetSearch(this,'ir.ui.view', null, null); + dataset.read_slice([],{domain : [['inherit_id','=',parseInt(view_id)]]},function (result) { + _.each(result ,function(num){console.log(result);}); + }); var ve_dataset = new openerp.web.DataSet(this,'ir.ui.view'); ve_dataset.read_ids([parseInt(view_id)],['arch'],function (arch){ - var arch = arch[0].arch; - var root = $(arch).filter(":first")[0]; - var tag = root.tagName.toLowerCase(); - var root_object = self.check_attr(root,tag,0); - var one_object = self.children_function(arch,tag,[],0,[root_object],[]); - return self.edit_view(one_object); + self.parse_xml(arch[0].arch); }); }, edit_view : function(one_object){ @@ -197,18 +209,19 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ break; case "side-up": if(side.prev().attr('level') == side.attr('level')){ - console.log(); $(side.prev()).before(side); } break; case "side-down": if(side.next().attr('level') == side.attr('level')){ - var v = side.next().next().attr('level') $(side.next()).after(side); } break; } }); + }, + search_object:function(main_object){ + }, on_expand: function(self){ var level = $(self).closest("tr[id^='viewedit-']").attr('level'); From 145694cc60f0ebe10925f1bfc0baa582e31a78be Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 26 Sep 2011 17:05:01 +0530 Subject: [PATCH 15/45] [IMP]implement code for down image with moving its all children. bzr revid: vme@tinyerp.com-20110926113501-5oed41l0miehjsgx --- addons/web/static/src/js/view_editor.js | 42 ++++++++++++++++++++----- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 824227174ef..a7ceb682a2c 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -198,7 +198,8 @@ 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]; switch (this.id) { case "side-add": @@ -213,15 +214,40 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } break; case "side-down": - if(side.next().attr('level') == side.attr('level')){ - $(side.next()).after(side); + var img = side.find("img[id='parentimg-"+id_tr+"']").attr('src'); + var level = side.attr('level'); + var list_shift =[]; + var last_tr; + list_shift.push(side); + if(img){ + while(1){ + var next_tr = side.next(); + if(next_tr.attr('level') <= level || next_tr.length==0){ + last_tr = next_tr; + break; + }else{ + list_shift.push(next_tr); + side = next_tr; + } + } + }else{last_tr = side.next();} + var last_tr_id = (last_tr.attr('id')).split('-')[1]; + img = last_tr.find("img[id='parentimg-"+last_tr_id+"']").attr('src'); + if(img){ + while(1){ + var nxt_tr = last_tr.next(); + if (nxt_tr.attr('level') <= level || nxt_tr.length==0){break;} + last_tr = nxt_tr; + } + list_shift.reverse() + } + _.each(list_shift,function(rec){ + $(last_tr).after(rec); + }); break; } }); - }, - search_object:function(main_object){ - }, on_expand: function(self){ var level = $(self).closest("tr[id^='viewedit-']").attr('level'); @@ -231,10 +257,10 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ if (nxt_tr.attr('level') > level){ cur_tr = nxt_tr; nxt_tr.hide(); - }else break; + }else return nxt_tr; } }, - on_collapse: function(self,parent_child_id){ + on_collapse: function(self,parent_child_id,id){ var id = self.id.split('-')[1]; var datas = _.detect(parent_child_id,function(res){ return res.key == id; From bdf4274f2bdf0085ecf7960529959ffa383d7feb Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Tue, 27 Sep 2011 10:35:03 +0530 Subject: [PATCH 16/45] [IMP]up-down tag throght image with its all chidren. bzr revid: vme@tinyerp.com-20110927050503-nw9rg581n8im0vwz --- addons/web/static/src/js/view_editor.js | 73 ++++++++++++++++++------- 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index a7ceb682a2c..fd4fcde9ee3 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -152,7 +152,9 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var view_id =(($("input[name='radiogroup']:checked").parent()).parent()).attr('data-id'); dataset = new openerp.web.DataSetSearch(this,'ir.ui.view', null, null); dataset.read_slice([],{domain : [['inherit_id','=',parseInt(view_id)]]},function (result) { - _.each(result ,function(num){console.log(result);}); + _.each(result ,function(num){ + // todo xpath + }); }); var ve_dataset = new openerp.web.DataSet(this,'ir.ui.view'); ve_dataset.read_ids([parseInt(view_id)],['arch'],function (arch){ @@ -209,42 +211,75 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ case "side-edit": break; case "side-up": - if(side.prev().attr('level') == side.attr('level')){ - $(side.prev()).before(side); - } - break; - case "side-down": - var img = side.find("img[id='parentimg-"+id_tr+"']").attr('src'); + var img = side.find("img[id='parentimg-"+id_tr+"']").attr('src'); var level = side.attr('level'); var list_shift =[]; var last_tr; + var next_tr; list_shift.push(side); + var cur_tr = side; + 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; + } if(img){ while(1){ var next_tr = side.next(); if(next_tr.attr('level') <= level || next_tr.length==0){ - last_tr = next_tr; break; }else{ list_shift.push(next_tr); side = next_tr; } } - }else{last_tr = side.next();} - var last_tr_id = (last_tr.attr('id')).split('-')[1]; - img = last_tr.find("img[id='parentimg-"+last_tr_id+"']").attr('src'); + } + if(last_tr.length!=0 && last_tr.attr('level') == level){ + _.each(list_shift,function(rec){ + $(last_tr).before(rec); + }); + } + break; + case "side-down": + var img = side.find("img[id='parentimg-"+id_tr+"']").attr('src'); + var level = side.attr('level'); + var list_shift =[]; + var last_tr; + var next_tr; + var cur_tr = side; + list_shift.push(side); if(img){ while(1){ - var nxt_tr = last_tr.next(); - if (nxt_tr.attr('level') <= level || nxt_tr.length==0){break;} - last_tr = nxt_tr; + var 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; + } } - list_shift.reverse() - + }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; + } + } + list_shift.reverse(); + _.each(list_shift,function(rec){ + $(last_tr).after(rec); + }); } - _.each(list_shift,function(rec){ - $(last_tr).after(rec); - }); break; } }); From 0d9bd77377f55d488db572fc5d0c1bb084408d67 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Tue, 27 Sep 2011 12:34:13 +0530 Subject: [PATCH 17/45] [FIX]side_id not define bzr revid: vme@tinyerp.com-20110927070413-qjhjmc853141i4so --- addons/web/static/src/js/view_editor.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index fd4fcde9ee3..3194a8aef03 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -121,7 +121,6 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ 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}); @@ -144,22 +143,23 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var root = $(arch).filter(":first")[0]; var tag = root.tagName.toLowerCase(); var root_object = self.check_attr(root,tag,0); - var one_object = self.children_function(arch,tag,[],0,[root_object],[]); - return self.edit_view(one_object); + return self.children_function(arch,tag,[],0,[root_object],[]); }, get_data : function(){ var self = this; + var inherited_view =[]; + var result; var view_id =(($("input[name='radiogroup']:checked").parent()).parent()).attr('data-id'); - dataset = new openerp.web.DataSetSearch(this,'ir.ui.view', null, null); - dataset.read_slice([],{domain : [['inherit_id','=',parseInt(view_id)]]},function (result) { - _.each(result ,function(num){ - // todo xpath - }); - }); var ve_dataset = new openerp.web.DataSet(this,'ir.ui.view'); + dataset = new openerp.web.DataSetSearch(self,'ir.ui.view', null, null); + dataset.read_slice([],{domain : [['inherit_id','=',parseInt(view_id)]]},function (result) { + return result; + }); ve_dataset.read_ids([parseInt(view_id)],['arch'],function (arch){ - self.parse_xml(arch[0].arch); - }); + var one_object = self.parse_xml(arch[0].arch); + return self.edit_view(one_object); + }); + }, edit_view : function(one_object){ var self = this; @@ -200,7 +200,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]; switch (this.id) { From 889cff8a19e289568a855c950e65cc07ff36b075 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Tue, 27 Sep 2011 12:47:53 +0530 Subject: [PATCH 18/45] [IMP]removed unnecessary variables bzr revid: vme@tinyerp.com-20110927071753-hp5qwox2wgt1bws5 --- addons/web/static/src/js/view_editor.js | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 3194a8aef03..b8ceec94845 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -65,7 +65,6 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ obj.child_id = []; obj.id = this.xml_id++; obj.level = level; - var vidhin = xml; var att_list = []; var name1 = "<" + tag; var xml_tag = "<" + tag; From 654478b811b3f2e42aba489b0f70d71497ff66ea Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Fri, 30 Sep 2011 18:19:32 +0530 Subject: [PATCH 19/45] [IMP]developed code for @ sign inherit view with xpath. bzr revid: vme@tinyerp.com-20110930124932-78pdg9o6o450rnur --- addons/web/static/src/js/view_editor.js | 391 ++++++++++++++---------- 1 file changed, 230 insertions(+), 161 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index b8ceec94845..46e83576eb2 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -1,6 +1,7 @@ openerp.web.view_editor = function(openerp) { var QWeb = openerp.web.qweb; openerp.web.ViewEditor = openerp.web.Widget.extend({ + init: function(parent, element_id, dataset, view, options) { this._super(parent); this.element_id = element_id @@ -9,55 +10,55 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ this.model = dataset.model; this.xml_id = 0; }, + start: function() { this.View_editor(); }, + View_editor : function(){ - var self = this; - var action = { - name:'ViewEditor', - context:this.session.user_context, - domain: [["model", "=", this.dataset.model]], - res_model: 'ir.ui.view', - views : [[false, 'list']], - type: 'ir.actions.act_window', - target: "current", - limit : 80, - auto_search : true, - flags: { - sidebar: false, - views_switcher: false, - action_buttons:false, - search_view:false, - pager:false, - radio:true - }, - }; - var action_manager = new openerp.web.ActionManager(this); - this.dialog = new openerp.web.Dialog(this,{ - modal: true, - title: 'ViewEditor', - width: 750, - height: 500, - buttons: { - "Create": function(){ - - }, - "Edit": function(){ - self.xml_id = 0 ; - self.get_data(); - - }, - "Close": function(){ - $(this).dialog('destroy'); - } - }, - - }); - this.dialog.start(); - this.dialog.open(); - action_manager.appendTo(this.dialog); - action_manager.do_action(action); + var self = this; + var action = { + name:'ViewEditor', + context:this.session.user_context, + domain: [["model", "=", this.dataset.model]], + res_model : 'ir.ui.view', + views : [[false, 'list']], + type: 'ir.actions.act_window', + target: "current", + limit : 80, + auto_search : true, + flags: { + sidebar: false, + views_switcher: false, + action_buttons:false, + search_view:false, + pager:false, + radio:true + }, + }; + var action_manager = new openerp.web.ActionManager(this); + this.dialog = new openerp.web.Dialog(this,{ + modal: true, + title: 'ViewEditor', + width: 750, + height: 500, + buttons: { + "Create": function(){ + //to do + }, + "Edit": function(){ + self.xml_id = 0 ; + self.get_data(); + }, + "Close": function(){ + $(this).dialog('destroy'); + } + }, + }); + this.dialog.start(); + this.dialog.open(); + action_manager.appendTo(this.dialog); + action_manager.do_action(action); }, check_attr:function(xml,tag,level){ @@ -66,25 +67,25 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ obj.id = this.xml_id++; obj.level = level; var att_list = []; - var name1 = "<" + tag; + var render_name = "<" + tag; var xml_tag = "<" + tag; $(xml).each(function() { att_list = this.attributes; att_list = _.select(att_list, function(attrs){ - xml_tag += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"'; - if (tag != 'button'){ - if(attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index"){ - name1 += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} - }else{ - if(attrs.nodeName == "name"){ - name1 += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} - } - }); - name1+= ">"; - xml_tag+= ">"; - }); + xml_tag += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"'; + if (tag != 'button'){ + if(attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index"){ + render_name += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} + }else{ + if(attrs.nodeName == "name"){ + render_name += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} + } + }); + render_name+= ">"; + xml_tag+= ">"; + }); obj.main_xml = xml_tag; - obj.name = name1; + obj.name = render_name; return obj; }, @@ -93,13 +94,13 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var check_id = parent_list[0]; var p_list = parent_list.slice(1); if(val.child_id.length != 0){ - $.each(val.child_id, function(key,val) { + $.each(val.child_id, function(key,val) { if(val.id==check_id){ if(p_list.length!=0){ self.save_object(val,p_list,child_obj_list); }else{ val.child_id = child_obj_list; - return; + return; } } }); @@ -116,49 +117,121 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ 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) { self.save_object(val,parent_list.slice(1),child_obj_list); }); } + for(var i=0;i= prev_tr.attr('level') || prev_tr.length==0){ - last_tr = prev_tr; - break; + 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; - } - if(img){ - while(1){ - var next_tr = side.next(); - if(next_tr.attr('level') <= level || next_tr.length==0){ - break; - }else{ - list_shift.push(next_tr); - side = next_tr; - } + cur_tr = prev_tr; } - } - if(last_tr.length!=0 && last_tr.attr('level') == level){ - _.each(list_shift,function(rec){ - $(last_tr).before(rec); - }); - } - break; - case "side-down": - var img = side.find("img[id='parentimg-"+id_tr+"']").attr('src'); - var level = side.attr('level'); - var list_shift =[]; - var last_tr; - var next_tr; - var cur_tr = side; - list_shift.push(side); - if(img){ - while(1){ - var next_tr = cur_tr.next(); + if(img){ + while(1){ + next_tr = side.next(); if(next_tr.attr('level') <= level || next_tr.length==0){ - last_tr = next_tr; 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{ list_shift.push(next_tr); cur_tr = next_tr; - } - } - }else{last_tr = cur_tr.next();} + } + } + } + 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'); @@ -270,16 +339,16 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ 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; + next_tr.hide(); + last_tr = next_tr; } - } + } list_shift.reverse(); _.each(list_shift,function(rec){ - $(last_tr).after(rec); - }); + $(last_tr).after(rec); + }); } - break; + break; } }); }, From 5e07d121a63e959b22e0982a4473e9104c46d211 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 3 Oct 2011 15:19:31 +0530 Subject: [PATCH 20/45] [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; From 59ef6514220f2e1d6a69024688abb0479e914dab Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Tue, 4 Oct 2011 16:15:50 +0530 Subject: [PATCH 21/45] [IMP] code refactore in view editor. bzr revid: ysa@tinyerp.com-20111004104550-abxppmgpbbqedv1k --- addons/web/static/src/js/view_editor.js | 442 ++++++++++++------------ 1 file changed, 219 insertions(+), 223 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 2650f966c7e..4bed60d67cd 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -16,52 +16,52 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }, View_editor : function(){ - var self = this; - var action = { - name:'ViewEditor', - context:this.session.user_context, - domain: [["model", "=", this.dataset.model]], - res_model : 'ir.ui.view', - views : [[false, 'list']], - type: 'ir.actions.act_window', - target: "current", - limit : 80, - auto_search : true, - flags: { - sidebar: false, - views_switcher: false, - action_buttons:false, - search_view:false, - pager:false, - radio:true + var self = this; + var action = { + name:'ViewEditor', + context:this.session.user_context, + domain: [["model", "=", this.dataset.model]], + res_model : 'ir.ui.view', + views : [[false, 'list']], + type: 'ir.actions.act_window', + target: "current", + limit : 80, + auto_search : true, + flags: { + sidebar: false, + views_switcher: false, + action_buttons:false, + search_view:false, + pager:false, + radio:true + }, + }; + var action_manager = new openerp.web.ActionManager(this); + this.dialog = new openerp.web.Dialog(this,{ + modal: true, + title: 'ViewEditor', + width: 750, + height: 500, + buttons: { + "Create": function(){ + //to do + }, + "Edit": function(){ + self.xml_id = 0 ; + self.get_data(); + }, + "Close": function(){ + $(this).dialog('destroy'); + } }, - }; - var action_manager = new openerp.web.ActionManager(this); - this.dialog = new openerp.web.Dialog(this,{ - modal: true, - title: 'ViewEditor', - width: 750, - height: 500, - buttons: { - "Create": function(){ - //to do - }, - "Edit": function(){ - self.xml_id = 0 ; - self.get_data(); - }, - "Close": function(){ - $(this).dialog('destroy'); - } - }, - }); - this.dialog.start(); - this.dialog.open(); - action_manager.appendTo(this.dialog); - action_manager.do_action(action); + }); + this.dialog.start(); + this.dialog.open(); + action_manager.appendTo(this.dialog); + action_manager.do_action(action); }, - check_attr:function(xml,tag,level){ + check_attr: function(xml, tag, level) { var obj = new Object(); obj.child_id = []; obj.id = this.xml_id++; @@ -71,45 +71,45 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var xml_tag = "<" + tag; $(xml).each(function() { att_list = this.attributes; - att_list = _.select(att_list, function(attrs){ - xml_tag += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"'; - if (tag != 'button'){ - if(attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index"){ - render_name += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} - }else{ - if(attrs.nodeName == "name"){ - render_name += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} - } - }); - render_name+= ">"; - xml_tag+= ">"; + att_list = _.select(att_list, function(attrs) { + xml_tag += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"'; + if (tag != 'button') { + if (attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index") { + render_name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"'; + } + } else { + if (attrs.nodeName == "name") render_name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"'; + } + }); + render_name += ">"; + xml_tag += ">"; }); obj.main_xml = xml_tag; obj.name = render_name; return obj; }, - save_object : function(val,parent_list,child_obj_list){ + save_object : function(val, parent_list, child_obj_list) { var self = this; var check_id = parent_list[0]; var p_list = parent_list.slice(1); - if(val.child_id.length != 0){ - $.each(val.child_id, function(key,val) { - if(val.id==check_id){ - if(p_list.length!=0){ - self.save_object(val,p_list,child_obj_list); - }else{ + if (val.child_id.length != 0) { + _.each(val.child_id, function(val, key) { + if (val.id==check_id) { + if (p_list.length!=0) { + self.save_object(val, p_list, child_obj_list); + } else { val.child_id = child_obj_list; - return; + return false; } } }); - }else{ + } else { val.child_id = child_obj_list; } }, - 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, parent_child_id) { var self = this; var child_obj_list = []; var parent_child_id = parent_child_id; @@ -117,128 +117,125 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ 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;}); + 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); + if (parents.length <= parent_list.length) { + parent_list.splice(parents.length - 1); } parent_list.push(parent_id); - $.each(main_object, function(key,val) { - self.save_object(val,parent_list.slice(1),child_obj_list); + _.each(main_object, function (val, key) { + self.save_object(val, parent_list.slice(1), child_obj_list); }); } - for(var i=0;i= 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(); + } + 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); }); } - 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; - } - } + break; } - 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; - } - } - list_shift.reverse(); - _.each(list_shift,function(rec){ - $(last_tr).after(rec); - }); - } - break; - } - }); + }); }, on_expand: function(self){ var level = $(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 (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){ + on_collapse: function(self, parent_child_id, id, main_object) { var id = self.id.split('-')[1]; - var datas = _.detect(parent_child_id,function(res){ + 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(); From 5bffa6a13542874ca61a2b1633f7ce0e57de845a Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 5 Oct 2011 16:51:27 +0530 Subject: [PATCH 22/45] [IMP]reduce code and implement for field position. bzr revid: vme@tinyerp.com-20111005112127-wihc38e3a5iipea7 --- addons/web/static/src/js/view_editor.js | 190 ++++++++++++------------ 1 file changed, 98 insertions(+), 92 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 2650f966c7e..1e5aef495c8 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -1,7 +1,6 @@ openerp.web.view_editor = function(openerp) { var QWeb = openerp.web.qweb; openerp.web.ViewEditor = openerp.web.Widget.extend({ - init: function(parent, element_id, dataset, view, options) { this._super(parent); this.element_id = element_id @@ -61,44 +60,38 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ action_manager.do_action(action); }, - check_attr:function(xml,tag,level){ + check_attr: function(xml ,tag,level) { var obj = new Object(); obj.child_id = []; obj.id = this.xml_id++; - obj.level = level; - var att_list = []; + obj.level = level+1; var render_name = "<" + tag; - var xml_tag = "<" + tag; $(xml).each(function() { - att_list = this.attributes; - att_list = _.select(att_list, function(attrs){ - xml_tag += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"'; - if (tag != 'button'){ - if(attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index"){ + _.each(this.attributes, function(attrs){ + if (tag != 'button') { + if (attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index") { render_name += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} - }else{ - if(attrs.nodeName == "name"){ + } else { + if (attrs.nodeName == "name") { render_name += ' ' +attrs.nodeName+'='+'"'+attrs.nodeValue+'"';} } }); render_name+= ">"; - xml_tag+= ">"; }); - obj.main_xml = xml_tag; obj.name = render_name; return obj; }, - save_object : function(val,parent_list,child_obj_list){ + save_object: function(val, parent_list, child_obj_list){ var self = this; var check_id = parent_list[0]; var p_list = parent_list.slice(1); - if(val.child_id.length != 0){ - $.each(val.child_id, function(key,val) { - if(val.id==check_id){ - if(p_list.length!=0){ - self.save_object(val,p_list,child_obj_list); - }else{ + if (val.child_id.length != 0) { + $.each(val.child_id, function(key, val) { + if (val.id == check_id) { + if (p_list.length!=0) { + self.save_object(val, p_list, child_obj_list); + } else { val.child_id = child_obj_list; return; } @@ -109,56 +102,58 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } }, - 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){ 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}); + if (children_list.length != 0) { var parents = $(children_list[0]).parents().get(); - if(parents.length <= parent_list.length){ + if (parents.length <= parent_list.length) { parent_list.splice(parents.length-1); } parent_list.push(parent_id); - $.each(main_object, function(key,val) { - self.save_object(val,parent_list.slice(1),child_obj_list); + $.each(main_object, function(key, val) { + self.save_object(val, parent_list.slice(1), child_obj_list); }); } - - for(var i=0;i" + 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'); - ve_dataset.read_ids([parseInt(view_id)],['arch'],function (arch){ + 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 = 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){ self.inherit_view(one_object,res); @@ -167,80 +162,91 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }); }); }, - inherit_view : function(one_object,result){ + + inherit_view: function(one_object, result){ var self = this; var root = $(result.arch).filter('*'); - var xpath_list = []; - 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]); + var xml_list = []; + var xpath_object ; + if (root[0].tagName.toLowerCase() == "data") { + 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(key,val) { - 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 = []; + 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"); + } + xpath_object = self.parse_xml(xml,result.id); } + $.each(function(){ + }); + self.search_object(val,check_list,[],position,xpath_object['main_object'],[]); }); }, - search_object:function(val,list,p_list,position,xpath_object,r_list){ + search_object: function(val ,list ,p_list ,position, xpath_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(key,val) { - self.increase_level(val,level) + 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++; + switch (position) + { + case "before": + if (index != 0) { index--; } + p_list.child_id.splice(index,0,xpath_object[0]); + break; + case "after": + index++; + p_list.child_id.splice(index,0,xpath_object[0]); + break; + case "inside": + val.child_id.push(xpath_object[0]); + break; + case "replace": + break; } - 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(key,val) { - self.search_object(val,list,p_list,position,xpath_object,return_list); + 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){ + + increase_level :function(val, level){ var self = this; val.level = level; - $.each(val.child_id, function(key,val) { + $.each(val.child_id, function(key, val) { self.increase_level(val,level+1); }); }, + edit_view : function(one_object){ var self = this; this.dialog = new openerp.web.Dialog(this,{ @@ -262,7 +268,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }); this.dialog.start().open(); this.dialog.$element.html(QWeb.render('view_editor', { - 'data': one_object['main_object'], + 'data': one_object, })); $("tr[id^='viewedit-']").click(function() { From c36d4ddea4732e8d936fcf3805bee72b8d08cf99 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Fri, 7 Oct 2011 11:46:04 +0530 Subject: [PATCH 23/45] [IMP]create parent-child list after inherit view. bzr revid: vme@tinyerp.com-20111007061604-zv97xy6byxmm5qhv --- addons/web/static/src/js/view_editor.js | 28 ++++++++++++++++--------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 1e5aef495c8..dc2d1489f80 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -60,7 +60,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ action_manager.do_action(action); }, - check_attr: function(xml ,tag,level) { + check_attr: function(xml ,tag, level) { var obj = new Object(); obj.child_id = []; obj.id = this.xml_id++; @@ -82,14 +82,14 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ return obj; }, - save_object: function(val, parent_list, child_obj_list){ + save_object: function(val, parent_list, child_obj_list) { var self = this; var check_id = parent_list[0]; var p_list = parent_list.slice(1); if (val.child_id.length != 0) { $.each(val.child_id, function(key, val) { if (val.id == check_id) { - if (p_list.length!=0) { + if (p_list.length != 0) { self.save_object(val, p_list, child_obj_list); } else { val.child_id = child_obj_list; @@ -152,17 +152,24 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ 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) { - _.each(result,function(res){ - self.inherit_view(one_object,res); - }); - return self.edit_view(one_object); + + return self.edit_view({"main_object": one_object, + "parent_child_id": self.parent_child_list(one_object, [])}); }); }); }, - + 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){ var self = this; var root = $(result.arch).filter('*'); @@ -249,6 +256,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ edit_view : function(one_object){ var self = this; + console.log("++++++++++++++++++++++",one_object); this.dialog = new openerp.web.Dialog(this,{ modal: true, title: 'Edit Xml', @@ -268,7 +276,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }); this.dialog.start().open(); this.dialog.$element.html(QWeb.render('view_editor', { - 'data': one_object, + 'data': one_object['main_object'], })); $("tr[id^='viewedit-']").click(function() { From 548b641acc38e822c60960c67fdf1cda003d8693 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Fri, 7 Oct 2011 13:07:29 +0530 Subject: [PATCH 24/45] [IMP]implement two type of xpath and fix level convert into integer. bzr revid: vme@tinyerp.com-20111007073729-8e0prjh64cjwp3vj --- addons/web/static/src/js/view_editor.js | 50 ++++++++++--------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index dc2d1489f80..32f25a01471 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -154,18 +154,21 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ one_object = self.parse_xml(arch[0].arch,view_id); dataset = new openerp.web.DataSetSearch(self, 'ir.ui.view', null, null); dataset.read_slice([],{domain : [['inherit_id','=',parseInt(view_id)]]},function (result) { - - return self.edit_view({"main_object": one_object, + _.each(result, function(res) { + 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_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); + self.parent_child_list(element.child_id, p_list); } }); return p_list; @@ -202,48 +205,34 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } xpath_object = self.parse_xml(xml,result.id); } - $.each(function(){ + $.each(one_object, function(key, val){ + self.search_object(val, check_list, xpath_object, []); }); - self.search_object(val,check_list,[],position,xpath_object['main_object'],[]); + }); }, - search_object: function(val ,list ,p_list ,position, xpath_object){ + + search_object: function(val ,list , xpath_object, p_list){ 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; + var level = val.level+1; $.each(xpath_object, function(key, val) { self.increase_level(val, level) }); - var index = _.indexOf(p_list.child_id,val); - switch (position) - { - case "before": - if (index != 0) { index--; } - p_list.child_id.splice(index,0,xpath_object[0]); - break; - case "after": - index++; - p_list.child_id.splice(index,0,xpath_object[0]); - break; - case "inside": - val.child_id.push(xpath_object[0]); - break; - case "replace": - break; - } - + val.child_id.push(xpath_object[0]); + return; }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); + self.search_object(val, list, xpath_object, p_list); }); } } - return return_list; + }, increase_level :function(val, level){ @@ -256,7 +245,6 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ edit_view : function(one_object){ var self = this; - console.log("++++++++++++++++++++++",one_object); this.dialog = new openerp.web.Dialog(this,{ modal: true, title: 'Edit Xml', @@ -376,18 +364,18 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }); }, 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){ 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; } }, on_collapse: function(self,parent_child_id,id,main_object){ - var id = self.id.split('-')[1]; + var id = parseInt(self.id.split('-')[1]); var datas = _.detect(parent_child_id,function(res){ return res.key == id; }); From e51b619b1dfe8c3fc1ba9fd33e5a3c05c88de1df Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 10 Oct 2011 18:14:52 +0530 Subject: [PATCH 25/45] [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; From 081cca81003c596e8fe5cd845cf134cbf7f9b92c Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 10 Oct 2011 18:40:50 +0530 Subject: [PATCH 26/45] [IMP] spaces done between parameter. bzr revid: vme@tinyerp.com-20111010131050-qmhx05s9qavs73rp --- addons/web/static/src/js/view_editor.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index fb2e13fed74..eecf54253ea 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -73,13 +73,13 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ _.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 + '"'; } } if (attrs.nodeName != "position") { - obj.att_list.push([attrs.nodeName,attrs.nodeValue]); + obj.att_list.push( [attrs.nodeName,attrs.nodeValue] ); } }); @@ -115,7 +115,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var child_obj_list = []; 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); }); @@ -137,7 +137,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ 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(); @@ -148,7 +148,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ obj.name = "" 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]); + obj.child_id.push( f_obj[0] ); f_obj.pop(); f_obj.push(obj); return f_obj; From 22099a2d9e5f0f201cb1e64304038478f60be495 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Tue, 11 Oct 2011 19:04:56 +0530 Subject: [PATCH 27/45] [IMP]fix review's issue and try to convert single method for inherited view search bzr revid: vme@tinyerp.com-20111011133456-vq1i5cv2pmbkhixz --- addons/web/static/src/js/view_editor.js | 64 ++++++++++++++----------- addons/web/static/src/xml/base.xml | 22 +++++---- 2 files changed, 50 insertions(+), 36 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 4ab03a88a0d..530b06bdb28 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -145,6 +145,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ obj.child_id = []; obj.id = this.xml_id++; obj.level = 0; + obj.att_list = []; obj.name = "" var root_object = self.check_attr(root,tag,0); f_obj = self.children_function(arch, tag, [], this.xml_id-1, [root_object], []) @@ -198,7 +199,10 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ 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); + _.each(part_expr,function(part){ + check_list.push(_.without($.trim(part.replace(/[^a-zA-Z 0-9 _]+/g,'!')).split("!"),"")); + }); + self.full_path_search(check_list ,one_object[0].child_id ,xpath_object); } else { xpath_object = self.parse_xml(xml,result.id); if($(xml).attr('expr')){ @@ -206,55 +210,61 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }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); - }); + + self.full_path_search(check_list ,one_object ,xpath_object); + } }); }, - full_path_search: function(part_expr ,val ,xpath_object, one_object) { + full_path_search: function(check_list ,val ,xpath_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(xpath_object.length!=0){ + var check = check_list[0]; + + if(check.length == 2){ + var int_val = parseInt(check[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]); + return _.include(main_list, check[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]); + return _.include(main_list, check[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;} + check = _.uniq(check); + var insert = _.intersection(main_list,check); + if(insert.length == check.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]); + if(obj){ + check_list.shift(); + if (check_list.length !=0){ + self.full_path_search(check_list ,obj.child_id ,xpath_object); }else{ - $.each(one_object, function(key, val){ - self.search_object(val, check_list, xpath_object); - }); + + var level = obj.level+1; + $.each(xpath_object, function(key, val) { + self.increase_level(val, level) + }); + obj.child_id.push(xpath_object[0]); + xpath_object.pop(); + console.log("check",check,obj) } + return obj; + }else{ + _.each(val,function(element){ + self.full_path_search(check_list ,element.child_id ,xpath_object); + }); } - return obj; + } }, search_object : function(val ,list , xpath_object){ diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index d0fbe16c6df..d8ec6f30daf 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1302,20 +1302,24 @@ - - - - -
- + + + - + + - + + - + +
From d071a3b2663ea8df0a43e0860ecea188f9b70055 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 12 Oct 2011 15:58:01 +0530 Subject: [PATCH 28/45] [IMP]optimize code and fix product inherited view. bzr revid: vme@tinyerp.com-20111012102801-i7v1aqux18gh56a3 --- addons/web/static/src/js/view_editor.js | 139 +++++++++--------------- addons/web/static/src/js/view_form.js | 7 +- 2 files changed, 59 insertions(+), 87 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 530b06bdb28..b95672ecfd8 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -90,7 +90,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ return obj; }, - save_object : function(val, parent_list, child_obj_list) { + save_object: function(val, parent_list, child_obj_list) { var self = this; var check_id = parent_list[0]; var p_list = parent_list.slice(1); @@ -110,27 +110,23 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } }, - children_function: 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(); var parents = $(children_list[0]).parents().get(); _.each(children_list, function (child_node) { - var string = self.check_attr(child_node,child_node.tagName.toLowerCase(),parents.length); - child_obj_list.push(string); + child_obj_list.push(self.check_attr(child_node,child_node.tagName.toLowerCase(),parents.length)); }); if (children_list.length != 0) { - var parents = $(children_list[0]).parents().get(); if (parents.length <= parent_list.length) { parent_list.splice(parents.length - 1); } parent_list.push(parent_id); - _.each(main_object, function (val, key) { - self.save_object(val, parent_list.slice(1), child_obj_list); - }); + self.save_object(main_object[0], parent_list.slice(1), child_obj_list); } - for (var i=0;i" + var obj ={'child_id':[],'id':this.xml_id++,'level':0,'att_list':[],'name':""}; 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; + obj.child_id = self.xml_node_create(arch, tag, [], this.xml_id-1, [root_object], []) + return [obj]; }, get_data: function() { @@ -186,8 +174,6 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var self = this; var root = $(result.arch).filter('*'); var xml_list = []; - var xpath_object ; - var part_expr = []; if (root[0].tagName.toLowerCase() == "data") { xml_list = $(root[0]).children(); } else { @@ -196,94 +182,75 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ _.each(xml_list , function(xml){ var parent_id; var check_list = []; + var xpath_object = self.parse_xml(xml,result.id); 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); _.each(part_expr,function(part){ check_list.push(_.without($.trim(part.replace(/[^a-zA-Z 0-9 _]+/g,'!')).split("!"),"")); }); - self.full_path_search(check_list ,one_object[0].child_id ,xpath_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(" "); + 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); + check_list = [_.flatten(xpath_object[0].child_id[0].att_list)]; } - - self.full_path_search(check_list ,one_object ,xpath_object); - } + self.full_path_search(check_list ,one_object ,xpath_object); }); }, full_path_search: function(check_list ,val ,xpath_object) { var self = this; - var obj; if(xpath_object.length!=0){ - var check = check_list[0]; - - if(check.length == 2){ - var int_val = parseInt(check[1]); - if(int_val){ + var check = check_list[0]; + var obj; + if(check.length == 2){ + if(parseInt(check[1])){ + var list_1 = _.select(val,function(element){ + var main_list = _.flatten(element.att_list); + return _.include(main_list, check[0]); + }); + obj = val[_.indexOf(val,list_1[parseInt(check[1])-1])]; + } else { + obj = _.detect(val, function(element){ + var main_list = _.flatten(element.att_list); + return _.include(main_list, check[0]); + }); + } + }else if(check.length == 3){ + obj = _.detect(val,function(element){ + var main_list = _.flatten(element.att_list); + check = _.uniq(check); + var insert = _.intersection(main_list,check); + if(insert.length == check.length ){return element;} + }); + }else{ var list_1 = _.select(val,function(element){ var main_list = _.flatten(element.att_list); return _.include(main_list, check[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[0]); - }); + if(list_1 != 0){ + if(check_list.length == 1){ + obj = list_1[0]; + }else{ + check_list.shift(); + } + } } - }else{ - obj = _.detect(val,function(element){ - var main_list = _.flatten(element.att_list); - check = _.uniq(check); - var insert = _.intersection(main_list,check); - if(insert.length == check.length ){return element;} - }); - } - if(obj){ - check_list.shift(); - if (check_list.length !=0){ - self.full_path_search(check_list ,obj.child_id ,xpath_object); - }else{ - + if(obj){ + check_list.shift(); + if (check_list.length !=0){ + self.full_path_search(check_list ,obj.child_id ,xpath_object); + }else{ var level = obj.level+1; - $.each(xpath_object, function(key, val) { - self.increase_level(val, level) - }); + self.increase_level(xpath_object[0], level) obj.child_id.push(xpath_object[0]); xpath_object.pop(); - console.log("check",check,obj) + return; + } } - return obj; - }else{ - _.each(val,function(element){ + else { + _.each(val,function(element){ self.full_path_search(check_list ,element.child_id ,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); }); } } diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index aecb7e534ea..4f082c49fff 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -918,6 +918,11 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ on_confirmed: function() { var self = this; + if(this.node.attrs.context && (!f_context.__ref)) + _.extend(this.view.dataset.context, this.view.datatarecord); + + + return this.view.do_execute_action( this.node.attrs, this.view.dataset, this.view.datarecord.id, function () { self.view.reload(); @@ -928,7 +933,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ this.check_disable(); }, check_disable: function() { - if (this.force_disabled || !this.view.is_interactible_record()) { + if (this.force_disabled || !this.view.is_interactible_record() || this.readonly) { this.$element.find("button").attr("disabled", "disabled"); this.$element.find("button").css("color", "grey"); } else { From 560206d3c43903a5bf97319f09516fdb868ae6aa Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 12 Oct 2011 16:06:08 +0530 Subject: [PATCH 29/45] [fix]removed other file's changes. bzr revid: vme@tinyerp.com-20111012103608-y20172v3uhcmcrs2 --- addons/web/static/src/js/view_form.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 4f082c49fff..aecb7e534ea 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -918,11 +918,6 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ on_confirmed: function() { var self = this; - if(this.node.attrs.context && (!f_context.__ref)) - _.extend(this.view.dataset.context, this.view.datatarecord); - - - return this.view.do_execute_action( this.node.attrs, this.view.dataset, this.view.datarecord.id, function () { self.view.reload(); @@ -933,7 +928,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ this.check_disable(); }, check_disable: function() { - if (this.force_disabled || !this.view.is_interactible_record() || this.readonly) { + if (this.force_disabled || !this.view.is_interactible_record()) { this.$element.find("button").attr("disabled", "disabled"); this.$element.find("button").css("color", "grey"); } else { From 2f2832f598445cf4266847158208b261fdeb58f4 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 12 Oct 2011 17:07:46 +0530 Subject: [PATCH 30/45] [IMP] // with any level supported. bzr revid: vme@tinyerp.com-20111012113746-9ozx06oet5l3hudx --- addons/web/static/src/js/view_editor.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 988a0330856..2881a9a217b 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -182,17 +182,13 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var parent_id; var check_list = []; var xpath_object = self.parse_xml(xml,result.id); - if (xml.tagName.toLowerCase() == "xpath" && ($(xml).attr('expr')).indexOf("//") == -1) { + if (xml.tagName.toLowerCase() == "xpath" ) { var part_expr = _.without($(xml).attr('expr').split("/"),""); _.each(part_expr,function(part){ check_list.push(_.without($.trim(part.replace(/[^a-zA-Z 0-9 _]+/g,'!')).split("!"),"")); }); } else { - 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)]; - } } self.full_path_search(check_list ,one_object ,xpath_object); }); From 90891fd08f497aae1eb059e492a71e6bd4a043ec Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 12 Oct 2011 17:55:30 +0530 Subject: [PATCH 31/45] [IMP]if-else replace with switch case bzr revid: vme@tinyerp.com-20111012122530-prscg6end1y00sh8 --- addons/web/static/src/js/view_editor.js | 54 ++++++++++++------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 2881a9a217b..d42470003b6 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -198,38 +198,38 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ if(xpath_object.length!=0){ var check = check_list[0]; var obj; - if(check.length == 2){ - if(parseInt(check[1])){ + switch (check.length) { + case 2: + if(parseInt(check[1])){ + var list_1 = _.select(val,function(element){ + var main_list = _.flatten(element.att_list); + return _.include(main_list, check[0]); + }); + obj = val[_.indexOf(val,list_1[parseInt(check[1])-1])]; + } else { + obj = _.detect(val, function(element){ + var main_list = _.flatten(element.att_list); + return _.include(main_list, check[0]); + }); + } + break; + case 3: + obj = _.detect(val,function(element){ + var main_list = _.flatten(element.att_list); + check = _.uniq(check); + var insert = _.intersection(main_list,check); + if(insert.length == check.length ){return element;} + }); + break; + case 1: var list_1 = _.select(val,function(element){ var main_list = _.flatten(element.att_list); return _.include(main_list, check[0]); }); - obj = val[_.indexOf(val,list_1[parseInt(check[1])-1])]; - } else { - obj = _.detect(val, function(element){ - var main_list = _.flatten(element.att_list); - return _.include(main_list, check[0]); - }); - } - }else if(check.length == 3){ - obj = _.detect(val,function(element){ - var main_list = _.flatten(element.att_list); - check = _.uniq(check); - var insert = _.intersection(main_list,check); - if(insert.length == check.length ){return element;} - }); - }else{ - var list_1 = _.select(val,function(element){ - var main_list = _.flatten(element.att_list); - return _.include(main_list, check[0]); - }); - if(list_1 != 0){ - if(check_list.length == 1){ - obj = list_1[0]; - }else{ - check_list.shift(); + if(list_1 != 0){ + (check_list.length == 1)? obj = list_1[0] : check_list.shift(); } - } + break; } if(obj){ check_list.shift(); From e1f9558ecf36f389b12dc6a35bbfdba46ad42973 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Wed, 12 Oct 2011 18:42:53 +0530 Subject: [PATCH 32/45] fix bzr revid: ysa@tinyerp.com-20111012131253-hjm2i9pew98el3lo --- addons/web/static/src/js/view_editor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 0498df42600..81c0d91043d 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -235,7 +235,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } else { _.each(val,function(element){ - self.full_path_search(cKKheck_list ,element.child_id ,xpath_object); + self.full_path_search(check_list ,element.child_id ,xpath_object); }); } } From 557895f275e785548e91d624c7a5575d612c9052 Mon Sep 17 00:00:00 2001 From: "Kunal Chavda (OpenERP)" Date: Fri, 14 Oct 2011 16:51:01 +0530 Subject: [PATCH 33/45] [IMP]Improved code for using element. bzr revid: kch@tinyerp.com-20111014112101-0ch74erynmj56isc --- addons/web/static/src/js/view_editor.js | 37 +++++++++++++------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 81c0d91043d..e042ee1d889 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -34,7 +34,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }, }; var action_manager = new openerp.web.ActionManager(this); - this.dialog = new openerp.web.Dialog(this,{ + this.view_edit_dialog = new openerp.web.Dialog(this,{ modal: true, title: 'ViewEditor', width: 750, @@ -52,9 +52,9 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } }, }); - this.dialog.start(); - this.dialog.open(); - action_manager.appendTo(this.dialog); + this.view_edit_dialog.start(); + this.view_edit_dialog.open(); + action_manager.appendTo(this.view_edit_dialog); action_manager.do_action(action); }, check_attr: function(xml, tag, level) { @@ -134,7 +134,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }, get_data: function() { var self = this; - var view_id =(($("input[name='radiogroup']:checked").parent()).parent()).attr('data-id'); + var view_id =((this.view_edit_dialog.$element.find("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); @@ -249,7 +249,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }, edit_view: function(one_object) { var self = this; - this.dialog = new openerp.web.Dialog(this,{ + this.edit_xml_dialog = new openerp.web.Dialog(this,{ modal: true, title: 'Edit Xml', width: 750, @@ -266,15 +266,15 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } } }); - this.dialog.start().open(); - this.dialog.$element.html(QWeb.render('view_editor', { + this.edit_xml_dialog.start().open(); + this.edit_xml_dialog.$element.html(QWeb.render('view_editor', { 'data': one_object['main_object'], })); - $("tr[id^='viewedit-']").click(function() { + this.edit_xml_dialog.$element.find("tr[id^='viewedit-']").click(function() { $("tr[id^='viewedit-']").removeClass('ui-selected'); $(this).addClass('ui-selected'); }); - $("img[id^='parentimg-']").click(function() { + this.edit_xml_dialog.$element.find("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); @@ -284,7 +284,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ self.on_collapse(this,one_object['parent_child_id'], one_object['main_object']); } }); - $("img[id^='side-']").click(function() { + this.edit_xml_dialog.$element.find("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'); ; @@ -347,7 +347,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) { - $("img[id='parentimg-" + last_tr_id + "']").attr('src', '/web/static/src/img/expand.gif'); + this.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; @@ -364,9 +364,9 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } }); }, - on_expand: function(self){ - var level = parseInt($(self).closest("tr[id^='viewedit-']").attr('level')); - var cur_tr = $(self).closest("tr[id^='viewedit-']"); + on_expand: function(expand_img){ + var level = parseInt($(expand_img).closest("tr[id^='viewedit-']").attr('level')); + var cur_tr = $(expand_img).closest("tr[id^='viewedit-']"); while (1) { var nxt_tr = cur_tr.next(); if (parseInt(nxt_tr.attr('level')) > level){ @@ -375,13 +375,14 @@ 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]; + on_collapse: function(collapse_img, parent_child_id, id, main_object) { + var self = this; + var id = collapse_img.id.split('-')[1]; var datas = _.detect(parent_child_id,function(res) { return res.key == id; }); _.each(datas.value, function(rec) { - var tr = $("tr[id='viewedit-"+rec+"']"); + var tr = self.edit_xml_dialog.$element.find("tr[id='viewedit-"+rec+"']"); tr.find("img[id='parentimg-"+rec+"']").attr('src','/web/static/src/img/expand.gif'); tr.show(); }); From e7888afb9dc03ce9d68eda47ec3de8d39de9633d Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 17 Oct 2011 18:51:16 +0530 Subject: [PATCH 34/45] [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 35/45] [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 36/45] [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 96339d71609b4e51b59341026cb1882abe16ed56 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Tue, 25 Oct 2011 12:13:23 +0530 Subject: [PATCH 37/45] [FIX] bzr revid: ysa@tinyerp.com-20111025064323-ds0o146bi1r83kd5 --- addons/web/static/src/js/views.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index afcc87a40a7..10e53efa591 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -917,7 +917,7 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{ }, on_sidebar_manage_views: function() { if (this.fields_view && this.fields_view.arch) { - var view_editor = new db.web.ViewEditor(this, this.$element, this.dataset, this.fields_view.arch); + var view_editor = new session.web.ViewEditor(this, this.$element, this.dataset, this.fields_view.arch); view_editor.start(); } else { this.do_warn("Manage Views", "Could not find current view declaration"); From 55ad46220db83d2f5d6dd86d243d0d9843b74511 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Tue, 25 Oct 2011 14:19:51 +0530 Subject: [PATCH 38/45] [IMP] improve css and view. bzr revid: ysa@tinyerp.com-20111025084951-0ty7vt1kfw0nrykr --- addons/web/static/src/css/base.css | 26 +++++++++++--- addons/web/static/src/xml/base.xml | 54 +++++++++++++++--------------- 2 files changed, 49 insertions(+), 31 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 34ec885b2a9..88d419c4059 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1410,12 +1410,30 @@ ul.oe-arrow-list li.oe-arrow-list-selected .oe-arrow-list-after { border-color: rgba(0,0,0,0); border-left-color: #B5B9FF; } -.openerp .view_editor{ +.openerp .oe_view_editor { + border-collapse: collapse; + padding: 0; + align: left; + width: 100%; +} +.openerp .oe_view_editor_colum{ font-size: 90%; font-weight: normal; - height : 10%; padding: 0; border-bottom: 1px solid #CFCCCC; } - - +.openerp .oe_view_editor_row:hover{ + background-color: #F3F3F3; +} +.openerp .oe_view_editor_tree_grid{ + text-align: left; + white-space: nowrap; + border-collapse: collapse; + width: 100%; +} +.openerp .oe_view_editor_tree_grid a:hover { + color: blue; +} +.openerp .oe_view_editor_tree_grid a { + display: block; +} diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 27a99f61c05..323854fa7a3 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1279,17 +1279,17 @@
- +
- - - + + -
+
- + @@ -1297,36 +1297,36 @@
- + - - - - - + + + + + Export From 1ee677eadbfa3e4c7d9836c48bea735f41f6a5a7 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Tue, 25 Oct 2011 16:40:12 +0530 Subject: [PATCH 39/45] [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 40/45] [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 c0c775014605a45a63fd6ccb40461a3762eb1244 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Tue, 1 Nov 2011 12:21:05 +0530 Subject: [PATCH 41/45] [FIX] vieweditor:- used close method instead of manually destory. bzr revid: ysa@tinyerp.com-20111101065105-kurbcohyig31qudu --- addons/web/static/src/js/view_editor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index e042ee1d889..8aebced3e98 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -48,7 +48,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ self.get_data(); }, "Close": function(){ - $(this).dialog('destroy'); + this.view_edit_dialog.close(); } }, }); @@ -262,7 +262,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ //todo }, "Close": function(){ - $(this).dialog('destroy'); + this.edit_xml_dialog.close(); } } }); From 21a5438b3a50f1f4b1f258f23f52bc029de106a6 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Tue, 1 Nov 2011 12:24:21 +0530 Subject: [PATCH 42/45] [FIX] bzr revid: ysa@tinyerp.com-20111101065421-kk7ixnqsrqon3th8 --- addons/web/static/src/js/view_editor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 8aebced3e98..429192570f1 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -48,7 +48,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ self.get_data(); }, "Close": function(){ - this.view_edit_dialog.close(); + self.view_edit_dialog.close(); } }, }); @@ -262,7 +262,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ //todo }, "Close": function(){ - this.edit_xml_dialog.close(); + self.edit_xml_dialog.close(); } } }); From c1a65b4970a93c30488aa4df14d0ebf36e3a86aa Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 2 Nov 2011 10:52:29 +0530 Subject: [PATCH 43/45] [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 44/45] [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; } From 82ea675d0f954b6b62fba37a48d578ffe42b27ab Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Wed, 2 Nov 2011 17:10:34 +0530 Subject: [PATCH 45/45] [IMP] View editor :- implement functionality of preview button. bzr revid: ysa@tinyerp.com-20111102114034-nmj18kx32igvqdub --- addons/web/static/src/js/view_editor.js | 28 +++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 09cfe84c702..a93f71e87bc 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -130,13 +130,14 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ get_data: function() { var self = this; var view_arch_list = []; - var view_id =((this.view_edit_dialog.$element.find("input[name='radiogroup']:checked").parent()).parent()).attr('data-id'); + self.main_view_id =((this.view_edit_dialog.$element.find("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); - view_arch_list.push({"view_id" : view_id, "arch" : arch[0].arch}); + ve_dataset.read_ids([parseInt(self.main_view_id)], ['arch', 'type'], function (arch) { + one_object = self.parse_xml(arch[0].arch,self.main_view_id); + self.main_view_type = arch[0].type + view_arch_list.push({"view_id" : self.main_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) { + dataset.read_slice([], {domain : [['inherit_id','=', parseInt(self.main_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); @@ -263,7 +264,22 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ //todo }, "Preview": function(){ - //todo + var action = { + context:self.session.user_context, + res_model : self.model, + views : [[self.main_view_id, self.main_view_type]], + type: 'ir.actions.act_window', + target: "new", + flags: { + sidebar: false, + views_switcher: false, + action_buttons:false, + search_view:false, + pager:false, + }, + }; + var action_manager = new openerp.web.ActionManager(self); + action_manager.do_action(action); }, "Close": function(){ self.edit_xml_dialog.close();
+ - - - - - + +
- + - + + - - - - + + id="side-edit" src="/web/static/src/img/icons/gtk-edit.png" style="cursor: pointer;"/> + + + +