From 0658a41309d713a91e91db5c4360762efe838e84 Mon Sep 17 00:00:00 2001 From: "Kunal Chavda (OpenERP)" Date: Tue, 8 Nov 2011 16:59:10 +0530 Subject: [PATCH] [IMP]Improved code as par review. bzr revid: kch@tinyerp.com-20111108112910-p177yz5g4lfcorg1 --- addons/web/static/src/js/view_editor.js | 218 ++++++++++-------------- addons/web/static/src/xml/base.xml | 6 +- 2 files changed, 92 insertions(+), 132 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 9814bb81e0f..edadbe005b0 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -22,31 +22,31 @@ var _PROPERTIES = { 'view' : [], }; var icons = ['','STOCK_ABOUT', 'STOCK_ADD', 'STOCK_APPLY', 'STOCK_BOLD', -'STOCK_CANCEL', 'STOCK_CDROM', 'STOCK_CLEAR', 'STOCK_CLOSE', 'STOCK_COLOR_PICKER', -'STOCK_CONNECT', 'STOCK_CONVERT', 'STOCK_COPY', 'STOCK_CUT', 'STOCK_DELETE', -'STOCK_DIALOG_AUTHENTICATION', 'STOCK_DIALOG_ERROR', 'STOCK_DIALOG_INFO', -'STOCK_DIALOG_QUESTION', 'STOCK_DIALOG_WARNING', 'STOCK_DIRECTORY', 'STOCK_DISCONNECT', -'STOCK_DND', 'STOCK_DND_MULTIPLE', 'STOCK_EDIT', 'STOCK_EXECUTE', 'STOCK_FILE', -'STOCK_FIND', 'STOCK_FIND_AND_REPLACE', 'STOCK_FLOPPY', 'STOCK_GOTO_BOTTOM', -'STOCK_GOTO_FIRST', 'STOCK_GOTO_LAST', 'STOCK_GOTO_TOP', 'STOCK_GO_BACK', -'STOCK_GO_DOWN', 'STOCK_GO_FORWARD', 'STOCK_GO_UP', 'STOCK_HARDDISK', -'STOCK_HELP', 'STOCK_HOME', 'STOCK_INDENT', 'STOCK_INDEX', 'STOCK_ITALIC', -'STOCK_JUMP_TO', 'STOCK_JUSTIFY_CENTER', 'STOCK_JUSTIFY_FILL', -'STOCK_JUSTIFY_LEFT', 'STOCK_JUSTIFY_RIGHT', 'STOCK_MEDIA_FORWARD', -'STOCK_MEDIA_NEXT', 'STOCK_MEDIA_PAUSE', 'STOCK_MEDIA_PLAY', -'STOCK_MEDIA_PREVIOUS', 'STOCK_MEDIA_RECORD', 'STOCK_MEDIA_REWIND', -'STOCK_MEDIA_STOP', 'STOCK_MISSING_IMAGE', 'STOCK_NETWORK', 'STOCK_NEW', -'STOCK_NO', 'STOCK_OK', 'STOCK_OPEN', 'STOCK_PASTE', 'STOCK_PREFERENCES', -'STOCK_PRINT', 'STOCK_PRINT_PREVIEW', 'STOCK_PROPERTIES', 'STOCK_QUIT', -'STOCK_REDO', 'STOCK_REFRESH', 'STOCK_REMOVE', 'STOCK_REVERT_TO_SAVED', -'STOCK_SAVE', 'STOCK_SAVE_AS', 'STOCK_SELECT_COLOR', 'STOCK_SELECT_FONT', -'STOCK_SORT_ASCENDING', 'STOCK_SORT_DESCENDING', 'STOCK_SPELL_CHECK', -'STOCK_STOP', 'STOCK_STRIKETHROUGH', 'STOCK_UNDELETE', 'STOCK_UNDERLINE', -'STOCK_UNDO', 'STOCK_UNINDENT', 'STOCK_YES', 'STOCK_ZOOM_100', -'STOCK_ZOOM_FIT', 'STOCK_ZOOM_IN', 'STOCK_ZOOM_OUT', -'terp-account', 'terp-crm', 'terp-mrp', 'terp-product', 'terp-purchase', -'terp-sale', 'terp-tools', 'terp-administration', 'terp-hr', 'terp-partner', -'terp-project', 'terp-report', 'terp-stock', 'terp-calendar', 'terp-graph', + 'STOCK_CANCEL', 'STOCK_CDROM', 'STOCK_CLEAR', 'STOCK_CLOSE', 'STOCK_COLOR_PICKER', + 'STOCK_CONNECT', 'STOCK_CONVERT', 'STOCK_COPY', 'STOCK_CUT', 'STOCK_DELETE', + 'STOCK_DIALOG_AUTHENTICATION', 'STOCK_DIALOG_ERROR', 'STOCK_DIALOG_INFO', + 'STOCK_DIALOG_QUESTION', 'STOCK_DIALOG_WARNING', 'STOCK_DIRECTORY', 'STOCK_DISCONNECT', + 'STOCK_DND', 'STOCK_DND_MULTIPLE', 'STOCK_EDIT', 'STOCK_EXECUTE', 'STOCK_FILE', + 'STOCK_FIND', 'STOCK_FIND_AND_REPLACE', 'STOCK_FLOPPY', 'STOCK_GOTO_BOTTOM', + 'STOCK_GOTO_FIRST', 'STOCK_GOTO_LAST', 'STOCK_GOTO_TOP', 'STOCK_GO_BACK', + 'STOCK_GO_DOWN', 'STOCK_GO_FORWARD', 'STOCK_GO_UP', 'STOCK_HARDDISK', + 'STOCK_HELP', 'STOCK_HOME', 'STOCK_INDENT', 'STOCK_INDEX', 'STOCK_ITALIC', + 'STOCK_JUMP_TO', 'STOCK_JUSTIFY_CENTER', 'STOCK_JUSTIFY_FILL', + 'STOCK_JUSTIFY_LEFT', 'STOCK_JUSTIFY_RIGHT', 'STOCK_MEDIA_FORWARD', + 'STOCK_MEDIA_NEXT', 'STOCK_MEDIA_PAUSE', 'STOCK_MEDIA_PLAY', + 'STOCK_MEDIA_PREVIOUS', 'STOCK_MEDIA_RECORD', 'STOCK_MEDIA_REWIND', + 'STOCK_MEDIA_STOP', 'STOCK_MISSING_IMAGE', 'STOCK_NETWORK', 'STOCK_NEW', + 'STOCK_NO', 'STOCK_OK', 'STOCK_OPEN', 'STOCK_PASTE', 'STOCK_PREFERENCES', + 'STOCK_PRINT', 'STOCK_PRINT_PREVIEW', 'STOCK_PROPERTIES', 'STOCK_QUIT', + 'STOCK_REDO', 'STOCK_REFRESH', 'STOCK_REMOVE', 'STOCK_REVERT_TO_SAVED', + 'STOCK_SAVE', 'STOCK_SAVE_AS', 'STOCK_SELECT_COLOR', 'STOCK_SELECT_FONT', + 'STOCK_SORT_ASCENDING', 'STOCK_SORT_DESCENDING', 'STOCK_SPELL_CHECK', + 'STOCK_STOP', 'STOCK_STRIKETHROUGH', 'STOCK_UNDELETE', 'STOCK_UNDERLINE', + 'STOCK_UNDO', 'STOCK_UNINDENT', 'STOCK_YES', 'STOCK_ZOOM_100', + 'STOCK_ZOOM_FIT', 'STOCK_ZOOM_IN', 'STOCK_ZOOM_OUT', + 'terp-account', 'terp-crm', 'terp-mrp', 'terp-product', 'terp-purchase', + 'terp-sale', 'terp-tools', 'terp-administration', 'terp-hr', 'terp-partner', + 'terp-project', 'terp-report', 'terp-stock', 'terp-calendar', 'terp-graph' ]; var QWeb = openerp.web.qweb; openerp.web.ViewEditor = openerp.web.Widget.extend({ @@ -162,7 +162,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ child_obj_list.push(self.convert_tag_to_obj(child_node, parents.length)); }); if (children_list.length != 0) { - 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); self.append_child_object(main_object[0], parent_list.slice(1), child_obj_list); } @@ -284,8 +284,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ obj.child_id.push(xpath_arch_object[0]); xpath_arch_object.pop(); } - } - else { + } else { _.each(arch_object, function(element) { self.inherit_apply(expr_list, element.child_id, xpath_arch_object); }); @@ -363,7 +362,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var view_find = side; while (1) { view_find = view_find.prev(); - if((self.edit_xml_dialog.$element.find(view_find).find('a').text()).search("view_id") != -1 + if ((self.edit_xml_dialog.$element.find(view_find).find('a').text()).search("view_id") != -1 && parseInt(view_find.attr('level')) < clicked_tr_level) { view_id = parseInt(($(view_find).find('a').text()).replace(/[^0-9]+/g, '')); view_xml_id = (view_find.attr('id')).split('-')[1]; @@ -426,10 +425,10 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ cur_tr = next_tr; } } - } - else { + } else { last_tr = cur_tr.next(); } + if ((self.edit_xml_dialog.$element.find(last_tr).find('a').text()).search("view_id") != -1) { return; } @@ -470,7 +469,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ if (insert.length == check_list.length ) {return xml_child;} }); } - return self.save_arch(arch.arch, obj[0].child_id[0], parseInt(clicked_tr_id), [], parseInt(clicked_tr_level), + return self.do_save_xml(arch.arch, obj[0].child_id[0], parseInt(clicked_tr_id), [], parseInt(clicked_tr_level), parseInt(view_id), arch, move_direct, update_values); }, get_object_by_id: function(view_xml_id, one_object, result) { @@ -486,7 +485,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } return result; }, - save_arch: function(arch1, obj, id, child_list, level, view_id, arch, move_direct, update_values){ + do_save_xml: 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); @@ -500,12 +499,12 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ $(next).after(arch1); var re_insert_obj = child_list.splice(index, 1); child_list.splice(index+1, 0, re_insert_obj[0]); - }else if(move_direct == "up"){ + } else if (move_direct == "up") { var prev = $(arch1).prev(); $(prev).before(arch1); var re_insert_obj = child_list.splice(index, 1); child_list.splice(index-1, 0, re_insert_obj[0]); - }else if(move_direct == "update_node"){ + } else if (move_direct == "update_node") { _.each(update_values, function(val){ $(arch1).attr(val[0],val[1]); }); @@ -528,7 +527,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ } if (obj.level <= level) { _.each(list_obj_xml, function(child_node) { - self.save_arch(child_node[0], child_node[1], id, obj.child_id, level, view_id, arch, move_direct, update_values); + self.do_save_xml(child_node[0], child_node[1], id, obj.child_id, level, view_id, arch, move_direct, update_values); }); } } @@ -575,7 +574,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ modal: true, title: 'Properties', width: 650, - height: 200, + height: 400, buttons: { "Update": function(){ var update_values = []; @@ -594,7 +593,7 @@ 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 widget = _.keys(self.property.map); var arch_val = self.get_object_by_id(clicked_tr_id,obj['main_object'],[]); this.edit_node_dialog.$element.append('
'); this.edit_widget = []; @@ -605,12 +604,16 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ if (_.include(widget,id)){ 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); - }else{ + } else { 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()+''); - (id=='groups')?type_widget.set_value(self.groups):type_widget.set_value(); + self.edit_node_dialog.$element.find('table[id=rec_table]').append(''+id+':'+type_widget.render()+''); + var view_val = _.detect(arch_val[0]['att_list'],function(res) { + return _.include(res, id); + }); + var value = null; + (id=='groups')?type_widget.set_value(self.groups,view_val):type_widget.set_value(value,view_val); type_widget.start(); }); }); @@ -659,7 +662,7 @@ openerp.web.ViewEditor.Field = openerp.web.Class.extend({ on_ui_change: function() { this.dirty = true; }, - render: function () { + render: function() { return QWeb.render(this.template, {widget: this}); }, }); @@ -668,31 +671,24 @@ openerp.web.ViewEditor.FieldBoolean = openerp.web.ViewEditor.Field.extend({ this._super(view, node, id); this.template = "view_boolean"; }, - start: function () { + start: function() { var self = this; - this.$element.find("tr[id="+ self.name+"] input").change(function() { + this.$element.find("input[id="+ self.name+"]").change(function() { self.on_ui_change(); }); }, - set_value: function() { + set_value: function(value,view_val) { var self = this; - var view_val = _.detect(this.node[0]['att_list'],function(res) { - return _.include(res,self.name); - }); - if(view_val){ - this.$element.find("tr[id="+ self.name+"] input").attr('checked', view_val[1]); + if (view_val) { + this.$element.find("input[id="+ self.name+"]").attr('checked', view_val[1]); } }, - get_value: function(){ + get_value: function() { if (!this.dirty) { return false; } - var val = this.$element.find("tr[id="+this.name+"] input").is(':checked'); - if (val){ - return [this.name,val]; - }else{ - return [this.name,null]; - } + var val = this.$element.find("input[id="+this.name+"]").is(':checked'); + return val ? [this.name,val] : [this.name,null]; } }); openerp.web.ViewEditor.FieldChar = openerp.web.ViewEditor.Field.extend({ @@ -702,28 +698,21 @@ openerp.web.ViewEditor.FieldChar = openerp.web.ViewEditor.Field.extend({ }, start: function () { var self = this; - this.$element.find("tr[id="+ this.name+"] input").change(function() { + this.$element.find("input[id="+ this.name+"]").change(function() { self.on_ui_change(); }); }, - set_value: function() { + set_value: function(value,view_val) { var self = this; - var view_val = _.detect(this.node[0]['att_list'],function(res) { - return _.include(res, self.name); - }); - view_val ? this.$element.find("tr[id="+self.name +"] input").val(view_val[1]): this.$element.find("tr[id="+self.name+"] input").val(); + view_val ? this.$element.find("input[id="+self.name+"]").val(view_val[1]): this.$element.find("tr[id="+self.name+"] input").val(); }, - get_value: function(){ + get_value: function() { if (!this.dirty) { return false; } var self = this; - var val= this.$element.find("tr[id="+this.name+"] input").val(); - if (val){ - return [this.name,val]; - }else{ - return [this.name,""]; - } + var val= this.$element.find("input[id="+this.name+"]").val(); + return val ? [this.name,val] : [this.name,""]; } }); openerp.web.ViewEditor.FieldSelect = openerp.web.ViewEditor.Field.extend({ @@ -733,35 +722,28 @@ openerp.web.ViewEditor.FieldSelect = openerp.web.ViewEditor.Field.extend({ }, start: function () { var self = this; - this.$element.find("tr[id="+ this.name+"] select").change(function() { + this.$element.find("select[id="+this.name+"]").change(function() { self.on_ui_change(); }); }, - set_value: function(value) { + set_value: function(value, view_val) { 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]==((typeof(item)=='string')?item:item[0])?true:false):false; - self.$element.find("tr[id="+self.name+"] select").append($("