From dd5270a00db6991c50991ef58b55daf8fb987d8d Mon Sep 17 00:00:00 2001 From: "Kunal Chavda (OpenERP)" Date: Fri, 4 Nov 2011 10:33:38 +0530 Subject: [PATCH] [IMP]Implement code for update node in view editor. bzr revid: kch@tinyerp.com-20111104050338-tdble3tr1v05a7cv --- addons/web/static/src/js/view_editor.js | 193 +++++++++++++++--------- 1 file changed, 123 insertions(+), 70 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index d7f059005f7..7221a895d17 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -112,7 +112,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ obj.att_list.push(tag); $(xml).each(function() { _.each(this.attributes, function(attrs){ - if (tag != 'button') { + if ((tag != 'button') && (tag != 'field')){ if (attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index") { render_name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"' ; } @@ -393,7 +393,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ fld_name= tag; } var properties = _PROPERTIES[tag]; - self.on_edit_node(properties,fld_name,id_tr); + self.on_edit_node(properties,fld_name,id_tr,one_object,view_id, view_xml_id, level); break; case "side-up": while (1) { @@ -465,7 +465,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } }); }, - save_move_arch: function(one_object, view_id, view_xml_id, id_tr, level, move_direct){ + save_move_arch: function(one_object, view_id, view_xml_id, id_tr, level, move_direct, update_values){ var self = this; var arch = _.detect(one_object['arch'],function(element){ return element.view_id == view_id; @@ -482,7 +482,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }); } return self.get_node(arch.arch, obj[0].child_id[0], parseInt(id_tr), [], parseInt(level), - parseInt(view_id), arch, move_direct); + parseInt(view_id), arch, move_direct, update_values); }, get_view_object: function(view_xml_id, one_object,result){ var self = this; @@ -497,13 +497,12 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } return result; }, - get_node: function(arch1, obj, id, child_list, level, view_id, arch, move_direct){ + get_node: function(arch1, obj, id, child_list, level, view_id, arch, move_direct, update_values){ var self = this; var children_list = $(arch1).children(); var list_obj_xml = _.zip(children_list,obj.child_id); if (id) { if (obj.id == id) { - var id; var parent = $(arch1).parents(); var index = _.indexOf(child_list, obj) var re_insert_obj = child_list.splice(index, 1); @@ -511,11 +510,20 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var next = $(arch1).next(); $(next).after(arch1); child_list.splice(index+1, 0, re_insert_obj[0]); - } else { + }else if(move_direct == "up"){ var prev = $(arch1).prev(); $(prev).before(arch1); child_list.splice(index-1, 0, re_insert_obj[0]); + }else if(move_direct == "update_node"){ + _.each(update_values, function(val){ + $(arch1).attr(val[0],val[1]); + }); + var new_obj = self.check_attr(arch1,arch1.tagName.toLowerCase(),obj.level); + new_obj.id = obj.id; + self.edit_xml_dialog.$element.find("tr[id='viewedit-"+id+"']").find('a').text(new_obj.name); + child_list.splice(_.indexOf(child_list, obj), 0, new_obj); } + parent = parent[parent.length-1]; var convert_to_utf = self.xml2Str(parent); if (convert_to_utf) { @@ -529,7 +537,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } 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); + self.get_node(child_node[0], child_node[1], id, obj.child_id, level, view_id, arch, move_direct, update_values); }); } } @@ -570,7 +578,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ tr.show(); }); }, - on_edit_node:function(properties,fld_name,id_tr){ + on_edit_node:function(properties,fld_name,id_tr,obj,view_id, view_xml_id, level){ var self = this; this.edit_node_dialog = new openerp.web.Dialog(this,{ modal: true, @@ -579,7 +587,13 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ height: 200, buttons: { "Update": function(){ - self.on_update_node(); + //self.on_update_node(); + var update_values = []; + _.each(self.edit_widget,function(widget){ + update_values.push(widget.get_value()); + }); + update_values = _.without(update_values,undefined); + self.save_move_arch(obj, view_id, view_xml_id, id_tr, level, "update_node", update_values); }, "Cancel": function(){ $(this).dialog('destroy'); @@ -589,18 +603,21 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ this.edit_node_dialog.start().open(); var widget = ['readonly','required','nolabel','completion','widget','groups','position','icon','align','special','type','target']; var arch_val = self.get_view_object(id_tr,one_object,[]); - self.edit_node_dialog.$element.append('
'); + self.edit_node_dialog.$element.append('
'); + self.edit_widget = []; _.each(properties,function(record){ var id = record; self.ready = $.when(self.on_groups(id)).then(function () { if (_.include(widget,id)){ - var type_widget = new (self.property.get_any(['undefined' , id, arch_val[0]['att_list'][0]])) (self.edit_node_dialog, arch_val); + var type_widget = new (self.property.get_any(['undefined' , id, arch_val[0]['att_list'][0]])) (self.edit_node_dialog, arch_val, id); + self.edit_widget.push(type_widget); self.edit_node_dialog.$element.find('table[id=rec_table]').append(''+id+':'+type_widget.render()+''); - (id=='groups')?type_widget.set_value(id,self.groups):type_widget.set_value(id); + (id=='groups')?type_widget.set_value(self.groups):type_widget.set_value(); }else{ - var type_widget = new openerp.web.ViewEditor.FieldChar (self.edit_node_dialog,arch_val); + var type_widget = new openerp.web.ViewEditor.FieldChar (self.edit_node_dialog,arch_val, id); + self.edit_widget.push(type_widget); self.edit_node_dialog.$element.find('table[id=rec_table]').append(''+id+':'+type_widget.render()+''); - type_widget.set_value(id); + type_widget.set_value(); } }); }); @@ -618,7 +635,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ groups = []; var res_groups = new openerp.web.DataSetSearch(this,'res.groups', null, null), model_data = new openerp.web.DataSetSearch(self,'ir.model.data', null, null); - res_groups + res_groups .read_slice([],{}) .done(function(res_grp) { _.each(res_grp,function(res){ @@ -638,137 +655,173 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }) return def.promise(); }, - on_update_node: function(){ - //todo - } + /*on_update_node: function(){ + var self = this; + var values = []; + _.each(self.edit_widget,function(widget){ + values.push(widget.get_value()); + }); + values = _.without(values,undefined); + }*/ }); openerp.web.ViewEditor.Field = openerp.web.Class.extend({ - init: function(view, node) { + init: function(view, node, id) { var self = this; this.$element = view.$element; this.node = node; + this.dirty = false; + this.name = id; }, render: function () { return QWeb.render(this.template, {widget: this}); } }); openerp.web.ViewEditor.FieldBoolean = openerp.web.ViewEditor.Field.extend({ - init: function(view, node) { - this._super(view, node); + init: function(view, node, id) { + this._super(view, node, id); this.template = "view_boolean"; }, - set_value: function(id) { + set_value: function() { + var self = this; var view_val = _.detect(this.node[0]['att_list'],function(res) { - return _.include(res,id); + return _.include(res,self.name); }); - view_val ? this.$element.find("tr[id="+id+"] input").attr('checked', view_val[1]): this.$element.find("tr[id="+id+"] input").attr('checked', false); + view_val ? this.$element.find("tr[id="+ self.name+"] input").attr('checked', view_val[1]): this.$element.find("tr[id="+self.name+"] input").attr('checked', false); + }, + get_value: function(){ + var val = this.$element.find("tr[id="+this.name+"] input").attr('checked'); + if (val){ + return [this.name,val]; + } } }); openerp.web.ViewEditor.FieldChar = openerp.web.ViewEditor.Field.extend({ - init: function(view, node) { - this._super(view, node); + init: function(view, node, id) { + this._super(view, node, id); this.template = "view_char"; }, - set_value: function(id) { + set_value: function() { + var self = this; var view_val = _.detect(this.node[0]['att_list'],function(res) { - return _.include(res,id); + return _.include(res, self.name); }); - view_val ? this.$element.find("tr[id="+id+"] input").val(view_val[1]): this.$element.find("tr[id="+id+"] input").val(); + view_val ? this.$element.find("tr[id="+self.name +"] input").val(view_val[1]): this.$element.find("tr[id="+self.name+"] input").val(); + }, + get_value: function(){ + var val= this.$element.find("tr[id="+this.name+"] input").val(); + if (val){ + return [this.name,val]; + } } }); openerp.web.ViewEditor.FieldSelect = openerp.web.ViewEditor.Field.extend({ - init: function(view, node) { - this._super(view, node); + init: function(view, node, id) { + this._super(view, node, id); this.template = "view_selection"; }, - set_value: function(id,value) { - var view_val = _.detect(this.node[0]['att_list'],function(res) { - return _.include(res,id); - }); + set_value: function(value) { var self = this; + var view_val = _.detect(this.node[0]['att_list'],function(res) { + return _.include(res,self.name); + }); _.each(value, function(item) { var select_val = view_val?(view_val[1]==item[0]?true:false):false; - self.$element.find("tr[id="+id+"] select").append($("