From cba17940ce576606f5124d29d85b1e473b7dcab6 Mon Sep 17 00:00:00 2001 From: "Jagdish Panchal (Open ERP)" Date: Thu, 22 Sep 2011 16:39:14 +0530 Subject: [FIX] Workflow buttons in one2many crash due to Name typecasting. lp bug: https://launchpad.net/bugs/851866 fixed bzr revid: jap@tinyerp.com-20110922110914-u1cydxz1njcp6h0k --- addons/web/static/src/js/view_list.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index eeda44c4c99..00a8e010bbd 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -749,8 +749,9 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis field = $target.closest('td').data('field'), $row = $target.closest('tr'), record_id = self.row_id($row); - - $(self).trigger('action', [field, record_id, function () { + + console.log('field',field, typeof field) + $(self).trigger('action', [field.toString(), record_id, function () { return self.reload_record(self.records.get(record_id)); }]); }) -- cgit v1.2.3 From 1d94e954e066db4041cf474bd8ae0c15decabb00 Mon Sep 17 00:00:00 2001 From: "Jagdish Panchal (Open ERP)" Date: Thu, 22 Sep 2011 18:35:40 +0530 Subject: [FIX] clen up. bzr revid: jap@tinyerp.com-20110922130540-nuru8qifwyym5d0s --- addons/web/static/src/js/view_list.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 00a8e010bbd..ad6863fb7df 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -749,8 +749,7 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis field = $target.closest('td').data('field'), $row = $target.closest('tr'), record_id = self.row_id($row); - - console.log('field',field, typeof field) + $(self).trigger('action', [field.toString(), record_id, function () { return self.reload_record(self.records.get(record_id)); }]); -- cgit v1.2.3 From 367706427455a68b17dff1980aefc7666db38127 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Wed, 5 Oct 2011 17:35:39 +0200 Subject: [IMP] notification: warnings does not expire bzr revid: chs@openerp.com-20111005153539-xxds5bog4p08m2yl --- addons/web/static/src/js/chrome.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index dae7ba62ceb..579a95b1bad 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -28,7 +28,9 @@ openerp.web.Notification = openerp.web.Widget.extend(/** @lends openerp.web.Not warn: function(title, text) { this.$element.notify('create', 'oe_notification_alert', { title: title, - text: text + text: text, + }, { + expires: false, }); } }); -- cgit v1.2.3 From 066f4425f059bd287b56d9b4a9d69e3b86f30a0f Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Mon, 10 Oct 2011 14:31:16 +0200 Subject: [IMP] allow overwrite of default dbname and login from querystring bzr revid: chs@openerp.com-20111010123116-8ibjek78ub83u7mp --- addons/web/static/src/js/chrome.js | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 1955298ba27..399751f00c0 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -487,6 +487,15 @@ openerp.web.Login = openerp.web.Widget.extend(/** @lends openerp.web.Login# */{ this.selected_password = localStorage.getItem('last_password_login_success'); } } + + var qs = jQuery.deparam(jQuery.param.querystring()); + if (qs.db) { + this.selected_db = qs.db; + } + if (qs.login) { + this.selected_login = qs.login; + } + }, start: function() { var self = this; -- cgit v1.2.3 From 27869cac8b76baea212575cf95c351a3cf5aa7d2 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Mon, 10 Oct 2011 14:34:32 +0200 Subject: [IMP] change the way the sections and items are added to the sidebar bzr revid: chs@openerp.com-20111010123432-619o61elz09jm9sy --- addons/web/static/src/js/view_form.js | 12 ++- addons/web/static/src/js/views.js | 139 +++++++++++++++++++++------------- 2 files changed, 93 insertions(+), 58 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index f1fab7702c3..af0a9370933 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -119,7 +119,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.sidebar = new openerp.web.Sidebar(this, this.options.sidebar_id); this.sidebar.start(); this.sidebar.do_unfold(); - this.sidebar.attachments = new openerp.web.form.SidebarAttachments(this.sidebar, this.sidebar.add_section('attachments', "Attachments"), this); + this.sidebar.attachments = new openerp.web.form.SidebarAttachments(this.sidebar, this); this.sidebar.add_toolbar(this.fields_view.toolbar); this.set_common_sidebar_sections(this.sidebar); } @@ -541,8 +541,12 @@ openerp.web.FormDialog = openerp.web.Dialog.extend({ openerp.web.form = {}; openerp.web.form.SidebarAttachments = openerp.web.Widget.extend({ - init: function(parent, element_id, form_view) { - this._super(parent, element_id); + init: function(parent, form_view) { + var $section = parent.add_section('Attachments'); + this.$div = $('
'); + $section.append(this.$div); + + this._super(parent, $section.attr('id')); this.view = form_view; }, do_update: function() { @@ -560,7 +564,7 @@ openerp.web.form.SidebarAttachments = openerp.web.Widget.extend({ }, on_attachments_loaded: function(attachments) { this.attachments = attachments; - this.$element.html(QWeb.render('FormView.sidebar.attachments', this)); + this.$div.html(QWeb.render('FormView.sidebar.attachments', this)); this.$element.find('.oe-binary-file').change(this.on_attachment_changed); this.$element.find('.oe-sidebar-attachment-delete').click(this.on_attachment_delete); }, diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index aeedee706d8..50ffb4bbbc5 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -512,6 +512,52 @@ db.web.Sidebar = db.web.Widget.extend({ self.do_toggle(); }); }, + + call_default_on_sidebar: function(item) { + var func_name = 'on_sidebar_' + _.underscored(item.label); + var fn = this.widget_parent[func_name]; + if(typeof fn === 'function') { + fn(item); + } + }, + + add_default_sections: function() { + this.add_items('Customize', [ + { + label: "Manage Views", + callback: this.call_default_on_sidebar, + title: "Manage views of the current object" + }, { + label: "Edit Workflow", + callback: this.call_default_on_sidebar, + title: "Manage views of the current object", + classname: 'oe_hide oe_sidebar_edit_workflow' + }, { + label: "Customize Object", + callback: this.call_default_on_sidebar, + title: "Manage views of the current object" + } + ]); + + this.add_items('Other Options', [ + { + label: "Import", + callback: this.call_default_on_sidebar, + }, { + label: "Export", + callback: this.call_default_on_sidebar, + }, { + label: "Translate", + callback: this.call_default_on_sidebar, + classname: 'oe_sidebar_translate oe_hide' + }, { + label: "View Log", + callback: this.call_default_on_sidebar, + classname: 'oe_hide oe_sidebar_view_log' + } + ]); + }, + add_toolbar: function(toolbar) { var self = this; _.each([['print', "Reports"], ['action', "Actions"], ['relate', "Links"]], function(type) { @@ -524,15 +570,29 @@ db.web.Sidebar = db.web.Widget.extend({ classname: 'oe_sidebar_' + type[0] } } - self.add_section(type[0], type[1], items); + self.add_items(type[1], items); } }); }, - add_section: function(code, name, items) { - // For each section, we pass a name/label and optionally an array of items. - // If no items are passed, then the section will be created as a custom section - // returning back an element_id to be used by a custom controller. - // Else, the section is a standard section with items displayed as links. + + add_section: function(name) { + var code = _.underscored(name), + $section = this.sections[code]; + + if(!$section) { + section_id = _.uniqueId(this.element_id + '_section_' + code + '_'); + var $section = $(db.web.qweb.render("Sidebar.section", { + section_id: section_id, + name: name, + classname: 'oe_sidebar_' + code, + })); + $section.appendTo(this.$element.find('div.sidebar-actions')); + this.sections[code] = $section; + } + return $section; + }, + + add_items: function(section_name, items) { // An item is a dictonary : { // label: label to be displayed for the link, // action: action to be launch when the link is clicked, @@ -541,25 +601,24 @@ db.web.Sidebar = db.web.Widget.extend({ // title: optional title for the link // } // Note: The item should have one action or/and a callback + // + var self = this, - section_id = _.uniqueId(this.element_id + '_section_' + code + '_'); + $section = this.add_section(section_name), + section_id = $section.attr('id'); + if (items) { for (var i = 0; i < items.length; i++) { items[i].element_id = _.uniqueId(section_id + '_item_'); this.items[items[i].element_id] = items[i]; } - } - var $section = $(db.web.qweb.render("Sidebar.section", { - section_id: section_id, - name: name, - classname: 'oe_sidebar_' + code, - items: items - })); - if (items) { - $section.find('a.oe_sidebar_action_a').click(function() { + + var $items = $(db.web.qweb.render("Sidebar.section.items", {items: items})); + + $items.find('a.oe_sidebar_action_a').click(function() { var item = self.items[$(this).attr('id')]; if (item.callback) { - item.callback(); + item.callback.apply(self, [item]); } if (item.action) { var ids = self.widget_parent.get_selected_ids(); @@ -589,10 +648,13 @@ db.web.Sidebar = db.web.Widget.extend({ } return false; }); + + var $ul = $section.find('ul'); + if(!$ul.length) { + $ul = $('
    ').appendTo($section); + } + $items.appendTo($ul); } - $section.appendTo(this.$element.find('div.sidebar-actions')); - this.sections[code] = $section; - return section_id; }, do_fold: function() { this.$element.addClass('closed-sidebar').removeClass('open-sidebar'); @@ -821,42 +883,11 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ }, do_search: function(view) { }, + set_common_sidebar_sections: function(sidebar) { - sidebar.add_section('customize', "Customize", [ - { - label: "Manage Views", - callback: this.on_sidebar_manage_view, - title: "Manage views of the current object" - }, { - label: "Edit Workflow", - callback: this.on_sidebar_edit_workflow, - title: "Manage views of the current object", - classname: 'oe_hide oe_sidebar_edit_workflow' - }, { - label: "Customize Object", - callback: this.on_sidebar_customize_object, - title: "Manage views of the current object" - } - ]); - sidebar.add_section('other', "Other Options", [ - { - label: "Import", - callback: this.on_sidebar_import - }, { - label: "Export", - callback: this.on_sidebar_export - }, { - label: "Translate", - callback: this.on_sidebar_translate, - classname: 'oe_sidebar_translate oe_hide' - }, { - label: "View Log", - callback: this.on_sidebar_view_log, - classname: 'oe_hide oe_sidebar_view_log' - } - ]); + sidebar.add_default_sections(); }, - on_sidebar_manage_view: function() { + on_sidebar_manage_views: function() { if (this.fields_view && this.fields_view.arch) { $('' + db.web.json_node_to_xml(this.fields_view.arch, true) + '').dialog({ width: '95%', height: 600}); } else { -- cgit v1.2.3 From 23f6c03942c03bdd0823bbee44f7692250da6eb4 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 10:25:34 +0200 Subject: [fix] forgot to return promise in the do_save() of the form view bzr revid: nicolas.vanhoren@openerp.com-20111012082534-dzz1upvvntjs4b1s --- addons/web/static/src/js/view_form.js | 1 + 1 file changed, 1 insertion(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c940f4909e9..3121a91b7dc 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -405,6 +405,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# } }; this.save_lock = this.save_lock.pipe(action, action); + return this.save_lock; }, do_save_edit: function() { this.do_save(); -- cgit v1.2.3 From 2e9c6392ea6c7b11e213db1a8d82793323aa47a4 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 12 Oct 2011 10:57:13 +0200 Subject: [FIX] remove default_home entirely bzr revid: xmo@openerp.com-20111012085713-upc0xto0dqf9k4fb --- addons/web/static/src/js/core.js | 1 - 1 file changed, 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 0d5b95ef669..da9c21bf551 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -74,7 +74,6 @@ openerp.web.qweb.debug = (window.location.search.indexOf('?debug') !== -1); } return this; } - // This should NOT be used, like callbackenable it's too hackish not enough javasish Class.include = function (properties) { for (var name in properties) { if (typeof properties[name] !== 'function' -- cgit v1.2.3 From 12e97f3e8e0fa87da5eabcd62c61cf586ac48c6f Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 10:58:52 +0200 Subject: [fix] problem with get_value() on o2m when it is called without calling is_dirty() first. bzr revid: nicolas.vanhoren@openerp.com-20111012085852-6tcqn1rmn00qoaqy --- addons/web/static/src/js/view_form.js | 1 + 1 file changed, 1 insertion(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 3121a91b7dc..55957388720 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2003,6 +2003,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ var self = this; if (!this.dataset) return []; + this.save_form_view(); var val = this.dataset.delete_all ? [commands.delete_all()] : []; val = val.concat(_.map(this.dataset.ids, function(id) { var alter_order = _.detect(self.dataset.to_create, function(x) {return x.id === id;}); -- cgit v1.2.3 From bd8f7a36a65f40b8f9112de219297daa725ae320 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 11:11:47 +0200 Subject: [fix] occasional problem when a form try to validate a o2m before it finished updating bzr revid: nicolas.vanhoren@openerp.com-20111012091147-k9nm1yzftm2oalo1 --- addons/web/static/src/js/view_form.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 55957388720..02832f49250 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2041,6 +2041,8 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ }, validate: function() { this.invalid = false; + if (!this.viewmanager.views[this.viewmanager.active_view]) + return; var view = this.viewmanager.views[this.viewmanager.active_view].controller; if (this.viewmanager.active_view === "form") { for (var f in view.fields) { -- cgit v1.2.3 From 7a8d4be486e38b840329351308b45c00d1057ab1 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 12 Oct 2011 11:30:31 +0200 Subject: [FIX] Menus, manual triggering of menus does not work when folded bzr revid: fme@openerp.com-20111012093031-3htkczhktnascdcg --- addons/web/static/src/js/chrome.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 1955298ba27..3b08cc9d36d 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -823,7 +823,9 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ this.session.active_id = id; this.rpc('/web/menu/action', {'menu_id': id}, this.on_menu_action_loaded); } - ev.stopPropagation(); + if (ev) { + ev.stopPropagation(); + } return false; }, do_menu_click: function($clicked_menu, manual) { @@ -866,6 +868,7 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ $sub_menu.hide(); return true; } + return manual; } else { return true; } -- cgit v1.2.3 From 5d7cf9c8f83b58138fba0fe7bfa8827d8895912a Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 12 Oct 2011 13:09:28 +0200 Subject: [IMP] Reload menu after installation wizardsi Hardcoded check for action.context.active_model === 'base.module.upgrade' in ir_actions_act_window_close. If you have a better solution, do not hesitate to propose it bzr revid: fme@openerp.com-20111012110928-kcjstqt28sh7nhky --- addons/web/static/src/js/views.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index f996b4149ed..210be479818 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -121,6 +121,9 @@ db.web.ActionManager = db.web.Widget.extend({ if (!this.dialog && on_closed) { on_closed(); } + if (this.dialog && action.context && action.context.active_model === 'base.module.upgrade') { + db.webclient.menu.reload(); + } this.dialog_stop(); }, ir_actions_server: function (action, on_closed) { -- cgit v1.2.3 From 56fdc587afed0dcebdf169b7b72dfc7ebf295786 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 12 Oct 2011 13:14:29 +0200 Subject: [FIX} incorrect condition for not going into colors management on tree views bzr revid: xmo@openerp.com-20111012111429-duldg0ko9wuq2zje --- addons/web/static/src/js/view_tree.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_tree.js b/addons/web/static/src/js/view_tree.js index 78818c069c0..5143adb3838 100644 --- a/addons/web/static/src/js/view_tree.js +++ b/addons/web/static/src/js/view_tree.js @@ -110,7 +110,7 @@ openerp.web.TreeView = openerp.web.View.extend(/** @lends openerp.web.TreeView# } }); - if (this.fields_view.arch.attrs.colors) { + if (!this.fields_view.arch.attrs.colors) { return; } this.colors = _(this.fields_view.arch.attrs.colors.split(';')).chain() -- cgit v1.2.3 From 230d99a228f73152c14cfd2e75dbfd8e351e700d Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 12 Oct 2011 13:43:31 +0200 Subject: [IMP] Added condition for menu reloading bzr revid: fme@openerp.com-20111012114331-7h9hask2nvy0m93d --- addons/web/static/src/js/views.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 210be479818..1fa963b5180 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -121,8 +121,11 @@ db.web.ActionManager = db.web.Widget.extend({ if (!this.dialog && on_closed) { on_closed(); } - if (this.dialog && action.context && action.context.active_model === 'base.module.upgrade') { - db.webclient.menu.reload(); + if (this.dialog && action.context) { + var model = action.context.active_model; + if (model === 'base.module.upgrade' || model === 'base.setup.installer') { + db.webclient.menu.reload(); + } } this.dialog_stop(); }, -- cgit v1.2.3 From 4d4e1a1f0ef7ee363c27451bd403d0db3f7cac30 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Wed, 12 Oct 2011 13:35:40 +0530 Subject: [FIX] import :- default value set on required field then remove this field on required fields list. lp bug: https://launchpad.net/bugs/871625 fixed bzr revid: ysa@tinyerp.com-20111012080540-1m6x6npy7e0jaoif --- addons/web/static/src/js/data_import.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data_import.js b/addons/web/static/src/js/data_import.js index 9c686846751..6eee2bd8ded 100644 --- a/addons/web/static/src/js/data_import.js +++ b/addons/web/static/src/js/data_import.js @@ -49,12 +49,18 @@ openerp.web.DataImport = openerp.web.Dialog.extend({ }); }; this.ready = $.Deferred.queue().then(function () { - self.required_fields = _(self.fields).chain() + self.required_default_fields = _(self.fields).chain() .filter(function (field) { return field.required; }) - .pluck('name') + .pluck('id') .value(); - convert_fields(self); - self.all_fields.sort(); + dataset.default_get(self.required_default_fields || [], function(res) { + self.required_fields = _(self.fields).chain() + .filter(function (field) {if( !(field.id in res)) return field.required; }) + .pluck('name') + .value(); + convert_fields(self); + self.all_fields.sort(); + }); }); }, start: function() { -- cgit v1.2.3 From 32d2e527fb64a28d8b25260c8e1427068b91319b Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Wed, 12 Oct 2011 11:54:26 +0200 Subject: [FIX] explicitly provide the code of sidebar sections bzr revid: chs@openerp.com-20111012095426-qb3see19uic61jr1 --- addons/web/static/src/js/views.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 50ffb4bbbc5..5837431530c 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -522,7 +522,8 @@ db.web.Sidebar = db.web.Widget.extend({ }, add_default_sections: function() { - this.add_items('Customize', [ + this.add_section('Customize', 'customize'); + this.add_items('customize', [ { label: "Manage Views", callback: this.call_default_on_sidebar, @@ -539,7 +540,8 @@ db.web.Sidebar = db.web.Widget.extend({ } ]); - this.add_items('Other Options', [ + this.add_section('Other Options', 'other'); + this.add_items('other', [ { label: "Import", callback: this.call_default_on_sidebar, @@ -570,14 +572,15 @@ db.web.Sidebar = db.web.Widget.extend({ classname: 'oe_sidebar_' + type[0] } } - self.add_items(type[1], items); + self.add_section(type[1], type[0]); + self.add_items(type[0], items); } }); }, - add_section: function(name) { - var code = _.underscored(name), - $section = this.sections[code]; + add_section: function(name, code) { + if(!code) code = _.userscored(name); + var $section = this.sections[code]; if(!$section) { section_id = _.uniqueId(this.element_id + '_section_' + code + '_'); @@ -592,7 +595,7 @@ db.web.Sidebar = db.web.Widget.extend({ return $section; }, - add_items: function(section_name, items) { + add_items: function(section_code, items) { // An item is a dictonary : { // label: label to be displayed for the link, // action: action to be launch when the link is clicked, @@ -604,7 +607,7 @@ db.web.Sidebar = db.web.Widget.extend({ // var self = this, - $section = this.add_section(section_name), + $section = this.add_section(_.titleize(section_code.replace('_', ' ')), section_code), section_id = $section.attr('id'); if (items) { -- cgit v1.2.3 From 1dfd69590d49db4ff8730ad656230ec921edba62 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Wed, 12 Oct 2011 12:18:02 +0200 Subject: [IMP] _t() sidebar bzr revid: chs@openerp.com-20111012101802-fdrjaj80x03hx7xz --- addons/web/static/src/js/views.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 5837431530c..b4f65023e11 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -522,38 +522,38 @@ db.web.Sidebar = db.web.Widget.extend({ }, add_default_sections: function() { - this.add_section('Customize', 'customize'); + this.add_section(_t('Customize'), 'customize'); this.add_items('customize', [ { - label: "Manage Views", + label: _t("Manage Views"), callback: this.call_default_on_sidebar, - title: "Manage views of the current object" + title: _t("Manage views of the current object"), }, { - label: "Edit Workflow", + label: _t("Edit Workflow"), callback: this.call_default_on_sidebar, - title: "Manage views of the current object", + title: _t("Manage views of the current object"), classname: 'oe_hide oe_sidebar_edit_workflow' }, { - label: "Customize Object", + label: _t("Customize Object"), callback: this.call_default_on_sidebar, - title: "Manage views of the current object" + title: _t("Manage views of the current object"), } ]); - this.add_section('Other Options', 'other'); + this.add_section(_t('Other Options'), 'other'); this.add_items('other', [ { - label: "Import", + label: _t("Import"), callback: this.call_default_on_sidebar, }, { - label: "Export", + label: _t("Export"), callback: this.call_default_on_sidebar, }, { - label: "Translate", + label: _t("Translate"), callback: this.call_default_on_sidebar, classname: 'oe_sidebar_translate oe_hide' }, { - label: "View Log", + label: _t("View Log"), callback: this.call_default_on_sidebar, classname: 'oe_hide oe_sidebar_view_log' } @@ -562,7 +562,7 @@ db.web.Sidebar = db.web.Widget.extend({ add_toolbar: function(toolbar) { var self = this; - _.each([['print', "Reports"], ['action', "Actions"], ['relate', "Links"]], function(type) { + _.each([['print', _t("Reports")], ['action', _t("Actions")], ['relate', _t("Links")]], function(type) { var items = toolbar[type[0]]; if (items.length) { for (var i = 0; i < items.length; i++) { -- cgit v1.2.3 From 7b6309dd1537e6b653cfb901c7a424c56a63ca9b Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Wed, 12 Oct 2011 13:57:44 +0200 Subject: [FIX] translation of attachment and calendar sidebar sections bzr revid: chs@openerp.com-20111012115744-sv7kvwqbt2p5vdio --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index af0a9370933..de360500c4e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -542,7 +542,7 @@ openerp.web.form = {}; openerp.web.form.SidebarAttachments = openerp.web.Widget.extend({ init: function(parent, form_view) { - var $section = parent.add_section('Attachments'); + var $section = parent.add_section(_t('Attachments'), 'attachments'); this.$div = $('
    '); $section.append(this.$div); -- cgit v1.2.3 From eb796396e03f2e4fd5a4d267c7597218d67c7c16 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 12 Oct 2011 14:09:38 +0200 Subject: [ADD] display of selection fields in format_value bzr revid: xmo@openerp.com-20111012120938-9lpxm6mf8jbde6oj --- addons/web/static/src/js/formats.js | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/formats.js b/addons/web/static/src/js/formats.js index d3d88bc3731..94b2c7085db 100644 --- a/addons/web/static/src/js/formats.js +++ b/addons/web/static/src/js/formats.js @@ -69,6 +69,13 @@ openerp.web.format_value = function (value, descriptor, value_if_empty) { } catch (e) { return value.format("%H:%M:%S"); } + case 'selection': + // Each choice is [value, label] + var result = _(descriptor.selection).detect(function (choice) { + return choice[0] === value; + }); + if (result) { return result[1]; } + return; default: return value; } -- cgit v1.2.3 From 378a9de3e861f121e715278ef863fdc924ea3f3f Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Wed, 12 Oct 2011 14:26:22 +0200 Subject: [FIX] hum hum bzr revid: chs@openerp.com-20111012122622-dcuhelpcgv119s6g --- addons/web/static/src/js/views.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index b4f65023e11..91ac8f39031 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -579,7 +579,7 @@ db.web.Sidebar = db.web.Widget.extend({ }, add_section: function(name, code) { - if(!code) code = _.userscored(name); + if(!code) code = _.underscored(name); var $section = this.sections[code]; if(!$section) { -- cgit v1.2.3 From 130e4411335e46f832d129f5ab58424f20cc555b Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 14:49:23 +0200 Subject: [fix] fixed rare problem in the o2m when we try to get its value before it has finished refreshing bzr revid: nicolas.vanhoren@openerp.com-20111012124923-zka6mskg56iha5wc --- addons/web/static/src/js/view_form.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index ebc895df673..c8fef313854 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1937,9 +1937,10 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ if (this.dataset.index === null && this.dataset.ids.length >= 1) { this.dataset.index = 0; } - this.form_last_update.then(function() { - this.form_last_update = view.do_show(); - }); + var act = function() { + return view.do_show(); + } + this.form_last_update = this.form_last_update.pipe(act, act);; } else if (self.viewmanager.active_view === "graph") { view.do_search(this.build_domain(), this.dataset.get_context(), []); } @@ -2007,7 +2008,8 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ var self = this; if (!this.dataset) return []; - this.save_form_view(); + if (!this.form_last_update.isResolved() && !this.form_last_update.isRejected()) + this.save_form_view(); var val = this.dataset.delete_all ? [commands.delete_all()] : []; val = val.concat(_.map(this.dataset.ids, function(id) { var alter_order = _.detect(self.dataset.to_create, function(x) {return x.id === id;}); -- cgit v1.2.3 From e1f9558ecf36f389b12dc6a35bbfdba46ad42973 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Wed, 12 Oct 2011 18:42:53 +0530 Subject: fix bzr revid: ysa@tinyerp.com-20111012131253-hjm2i9pew98el3lo --- addons/web/static/src/js/view_editor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') 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); }); } } -- cgit v1.2.3 From efa2ca1195f46b9b9427132d55b105a1c3c1a42f Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 16:10:07 +0200 Subject: [imp] lot of concurrency improvements for form view bzr revid: nicolas.vanhoren@openerp.com-20111012141007-87w0fgemvqv2ul15 --- addons/web/static/src/js/view_form.js | 42 +++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 14 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c8fef313854..94e175584b5 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -45,6 +45,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# _.defaults(this.options, {"always_show_new_button": true, "not_interactible_on_create": false}); this.save_lock = $.Deferred().resolve(); + this.reload_lock = $.Deferred().resolve(); }, start: function() { this._super(); @@ -367,6 +368,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# do_save: function(success, prepend_on_create) { var self = this; var action = function() { + try { if (!self.ready) { return $.Deferred().reject(); } @@ -403,6 +405,10 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# }).then(success); } } + } catch (e) { + console.error(e); + return $.Deferred().reject(); + } }; this.save_lock = this.save_lock.pipe(action, action); return this.save_lock; @@ -430,7 +436,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# // should not happen in the server, but may happen for internal purpose return $.Deferred().reject(); } else { - return this.reload().then(success); + this.reload(); + return $.when().then(success); } }, /** @@ -464,9 +471,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.sidebar.attachments.do_update(); } console.debug("The record has been created with id #" + this.datarecord.id); - return this.reload().pipe(function() { - return _.extend(r, {created: true}); - }).then(success); + this.reload() + return $.when(_.extend(r, {created: true})).then(success); } }, on_action: function (action) { @@ -476,15 +482,21 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# console.debug("Cancelling form"); }, reload: function() { - if (this.dataset.index == null || this.dataset.index < 0) { - return $.when(this.on_button_new()); - } else { - return this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); - } + var self = this; + var act = function() { + if (self.dataset.index == null || self.dataset.index < 0) { + return $.when(self.on_button_new()); + } else { + return self.dataset.read_index(_.keys(self.fields_view.fields), self.on_record_loaded); + } + }; + this.reload_lock = this.reload_lock.pipe(act, act); + return this.reload_lock; }, get_fields_values: function() { var values = {}; _.each(this.fields, function(value, key) { + value.is_dirty(); var val = value.get_value(); values[key] = val; }); @@ -923,7 +935,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ return self.on_confirmed(); } }; - if (!this.node.attrs.special && (this.view.dirty_for_user || !this.view.datarecord.id)) { + if (!this.node.attrs.special) { return this.view.recursive_save().pipe(exec_action); } else { return exec_action(); @@ -2008,8 +2020,6 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ var self = this; if (!this.dataset) return []; - if (!this.form_last_update.isResolved() && !this.form_last_update.isRejected()) - this.save_form_view(); var val = this.dataset.delete_all ? [commands.delete_all()] : []; val = val.concat(_.map(this.dataset.ids, function(id) { var alter_order = _.detect(self.dataset.to_create, function(x) {return x.id === id;}); @@ -2372,13 +2382,17 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save-new"); $nbutton.click(function() { $.when(self.view_form.do_save()).then(function() { - self.view_form.on_button_new(); + self.view_form.reload_lock.then(function() { + self.view_form.on_button_new(); + }); }); }); var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save"); $nbutton.click(function() { $.when(self.view_form.do_save()).then(function() { - self.check_exit(); + self.view_form.reload_lock.then(function() { + self.check_exit(); + }); }); }); var $cbutton = $buttons.find(".oe_selectcreatepopup-form-close"); -- cgit v1.2.3 From 2ebe653f6586e266490014c3000ee1de4479ab22 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 17:08:30 +0200 Subject: [imp] modified form view to really have on_changes that can not execute concurently bzr revid: nicolas.vanhoren@openerp.com-20111012150830-7eupfrzfeh2wh9j6 --- addons/web/static/src/js/view_form.js | 147 ++++++++++++++++++---------------- 1 file changed, 80 insertions(+), 67 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 94e175584b5..8e37dc4540b 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -33,7 +33,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.widgets_counter = 0; this.fields = {}; this.datarecord = {}; - this.ready = false; this.show_invalid = true; this.dirty_for_user = false; this.default_focus_field = null; @@ -44,7 +43,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.translatable_fields = []; _.defaults(this.options, {"always_show_new_button": true, "not_interactible_on_create": false}); - this.save_lock = $.Deferred().resolve(); + this.mutating_lock = $.Deferred(); + this.initial_mutating_lock = this.mutating_lock; this.reload_lock = $.Deferred().resolve(); }, start: function() { @@ -182,7 +182,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# } } this.on_form_changed(); - this.show_invalid = this.ready = true; + this.initial_mutating_lock.resolve(); + this.show_invalid = true; this.do_update_pager(record.id == null); if (this.sidebar) { this.sidebar.attachments.do_update(); @@ -225,69 +226,78 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# $pager.find('span.oe_pager_count').html(this.dataset.ids.length); }, do_onchange: function(widget, processed) { - processed = processed || []; - if (widget.node.attrs.on_change) { - var self = this; - this.ready = false; - var onchange = _.trim(widget.node.attrs.on_change); - var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/); - if (call) { - var method = call[1], args = []; - var context_index = null; - var argument_replacement = { - 'False' : function() {return false;}, - 'True' : function() {return true;}, - 'None' : function() {return null;}, - 'context': function(i) { - context_index = i; - var ctx = widget.build_context ? widget.build_context() : {}; - return ctx; - } - }; - var parent_fields = null; - _.each(call[2].split(','), function(a, i) { - var field = _.trim(a); - if (field in argument_replacement) { - args.push(argument_replacement[field](i)); - return; - } else if (self.fields[field]) { - var value = self.fields[field].get_on_change_value(); - args.push(value == null ? false : value); - return; - } else { - var splitted = field.split('.'); - if (splitted.length > 1 && _.trim(splitted[0]) === "parent" && self.dataset.parent_view) { - if (parent_fields === null) { - parent_fields = self.dataset.parent_view.get_fields_values(); - } - var p_val = parent_fields[_.trim(splitted[1])]; - if (p_val !== undefined) { - args.push(p_val == null ? false : p_val); - return; + var self = this; + var act = function() { + try { + processed = processed || []; + if (widget.node.attrs.on_change) { + var onchange = _.trim(widget.node.attrs.on_change); + var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/); + if (call) { + var method = call[1], args = []; + var context_index = null; + var argument_replacement = { + 'False' : function() {return false;}, + 'True' : function() {return true;}, + 'None' : function() {return null;}, + 'context': function(i) { + context_index = i; + var ctx = widget.build_context ? widget.build_context() : {}; + return ctx; + } + }; + var parent_fields = null; + _.each(call[2].split(','), function(a, i) { + var field = _.trim(a); + if (field in argument_replacement) { + args.push(argument_replacement[field](i)); + return; + } else if (self.fields[field]) { + var value = self.fields[field].get_on_change_value(); + args.push(value == null ? false : value); + return; + } else { + var splitted = field.split('.'); + if (splitted.length > 1 && _.trim(splitted[0]) === "parent" && self.dataset.parent_view) { + if (parent_fields === null) { + parent_fields = self.dataset.parent_view.get_fields_values(); + } + var p_val = parent_fields[_.trim(splitted[1])]; + if (p_val !== undefined) { + args.push(p_val == null ? false : p_val); + return; + } } } - } - throw "Could not get field with name '" + field + - "' for onchange '" + onchange + "'"; - }); - var ajax = { - url: '/web/dataset/call', - async: false - }; - return this.rpc(ajax, { - model: this.dataset.model, - method: method, - args: [(this.datarecord.id == null ? [] : [this.datarecord.id])].concat(args), - context_id: context_index === null ? null : context_index + 1 - }, function(response) { - self.on_processed_onchange(response, processed); - }); - } else { - console.log("Wrong on_change format", on_change); + throw "Could not get field with name '" + field + + "' for onchange '" + onchange + "'"; + }); + var ajax = { + url: '/web/dataset/call', + async: false + }; + return self.rpc(ajax, { + model: self.dataset.model, + method: method, + args: [(self.datarecord.id == null ? [] : [self.datarecord.id])].concat(args), + context_id: context_index === null ? null : context_index + 1 + }).pipe(function(response) { + return self.on_processed_onchange(response, processed); + }); + } else { + console.log("Wrong on_change format", on_change); + } } - } + } catch(e) { + console.error(e); + return $.Deferred().reject(); + } + }; + this.mutating_lock = this.mutating_lock.pipe(act, act); + return this.mutating_lock; }, on_processed_onchange: function(response, processed) { + try { var result = response; if (result.value) { for (var f in result.value) { @@ -320,7 +330,11 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# if (result.domain) { // TODO: } - this.ready = true; + return $.Deferred().resolve(); + } catch(e) { + console.error(e); + return $.Deferred().reject(); + } }, on_button_new: function() { var self = this; @@ -369,9 +383,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# var self = this; var action = function() { try { - if (!self.ready) { - return $.Deferred().reject(); - } + if (!self.initial_mutating_lock.isResolved() && !self.initial_mutating_lock.isRejected()) + return; var form_dirty = false, form_invalid = false, values = {}, @@ -410,8 +423,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# return $.Deferred().reject(); } }; - this.save_lock = this.save_lock.pipe(action, action); - return this.save_lock; + this.mutating_lock = this.mutating_lock.pipe(action, action); + return this.mutating_lock; }, do_save_edit: function() { this.do_save(); -- cgit v1.2.3 From 101dd015023d30994db027624cf17f1b6f067da0 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 17:35:18 +0200 Subject: [fix] rollbacked previous fix regarding save of o2m when doing a get_value bzr revid: nicolas.vanhoren@openerp.com-20111012153518-gt8uyhagjzi8qc72 --- addons/web/static/src/js/view_form.js | 1 - 1 file changed, 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 8e37dc4540b..e395f593f3e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -509,7 +509,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# get_fields_values: function() { var values = {}; _.each(this.fields, function(value, key) { - value.is_dirty(); var val = value.get_value(); values[key] = val; }); -- cgit v1.2.3 From 2eab13708fe9f76ed7356cddff12a647f9aa02a6 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 12 Oct 2011 15:12:55 +0200 Subject: [IMP] make Registry.get_any faster throwing exceptions seems quite slow in Safari, and generates a significant performance hit in dashboards bzr revid: xmo@openerp.com-20111012131255-2cayqxedjpdtj432 --- addons/web/static/src/js/core.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index da9c21bf551..bed5f199157 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -287,14 +287,12 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry */ get_any: function (keys) { for (var i=0; i Date: Wed, 12 Oct 2011 17:57:04 +0200 Subject: [fix] problem in delivery orders, when trying to click on a button in the o2m bzr revid: nicolas.vanhoren@openerp.com-20111012155704-22dgojl8ag3av4sn --- addons/web/static/src/js/view_form.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index e395f593f3e..7ed7bcd200e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -45,6 +45,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# "not_interactible_on_create": false}); this.mutating_lock = $.Deferred(); this.initial_mutating_lock = this.mutating_lock; + this.on_change_lock = $.Deferred().resolve(); this.reload_lock = $.Deferred().resolve(); }, start: function() { @@ -293,8 +294,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# return $.Deferred().reject(); } }; - this.mutating_lock = this.mutating_lock.pipe(act, act); - return this.mutating_lock; + this.on_change_lock = this.on_change_lock.pipe(act, act); + return this.on_change_lock; }, on_processed_onchange: function(response, processed) { try { @@ -2055,9 +2056,10 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ var view = this.viewmanager.views[this.viewmanager.active_view].controller; if (this.viewmanager.active_view === "form") { var res = $.when(view.do_save()); - if (!res.isResolved() && !res.isRejected()) { - throw "Asynchronous get_value() is not supported in form view."; - } + // it seems line there are some cases when this happens + /*if (!res.isResolved() && !res.isRejected()) { + console.warn("Asynchronous get_value() is not supported in form view."); + }*/ return res; } } -- cgit v1.2.3 From fc823e76bd0c5cdb28f5e20190c0a13cabddc33c Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 18:13:22 +0200 Subject: [fix] rare problem in o2m bzr revid: nicolas.vanhoren@openerp.com-20111012161322-rnjei1os2xjb0qax --- addons/web/static/src/js/view_form.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 7ed7bcd200e..b0dce062519 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1887,6 +1887,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ this._super(view, node); this.is_started = $.Deferred(); this.form_last_update = $.Deferred(); + this.init_form_last_update = this.form_last_update; this.disable_utility_classes = true; }, start: function() { @@ -1928,7 +1929,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ form: 'openerp.web.form.One2ManyFormView' }); var once = $.Deferred().then(function() { - self.form_last_update.resolve(); + self.init_form_last_update.resolve(); }); this.viewmanager.on_controller_inited.add_last(function(view_type, controller) { if (view_type == "list") { -- cgit v1.2.3 From a58395f2af3181bf94738a6cfcfa7c691172437a Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 13 Oct 2011 10:14:45 +0200 Subject: [FIX] do no load the menu until a session is active [IMP] make menu loading hookable bzr revid: chs@openerp.com-20111013081445-1xzvodzrtxvacbzz --- addons/web/static/src/js/chrome.js | 4 ++-- addons/web/static/src/js/views.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 1742bd91c95..dae7ba62ceb 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -788,9 +788,8 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ }, start: function() { this.$secondary_menu.addClass(this.folded ? 'oe_folded' : 'oe_unfolded'); - this.reload(); }, - reload: function() { + do_reload: function() { this.rpc("/web/menu/load", {}, this.on_loaded); }, on_loaded: function(data) { @@ -972,6 +971,7 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie this.menu.start(); }, on_logged: function() { + this.menu.do_reload(); if(this.action_manager) this.action_manager.stop(); this.action_manager = new openerp.web.ActionManager(this); diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 593e5cab116..006213086be 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -124,7 +124,7 @@ db.web.ActionManager = db.web.Widget.extend({ if (this.dialog && action.context) { var model = action.context.active_model; if (model === 'base.module.upgrade' || model === 'base.setup.installer') { - db.webclient.menu.reload(); + db.webclient.menu.do_reload(); } } this.dialog_stop(); -- cgit v1.2.3 From c7a888f343c7fa11e266d3f2e75a6bcd092d5910 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 13 Oct 2011 11:38:14 +0200 Subject: [fix] buttons do not use an evalutation context despite the fact the context on buttons can depend on it bzr revid: nicolas.vanhoren@openerp.com-20111013093814-xalvnvp6vajslruo --- addons/web/static/src/js/view_form.js | 99 +++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 46 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index b0dce062519..7e5871166dc 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -735,6 +735,51 @@ openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form. render: function() { var template = this.template; return QWeb.render(template, { "widget": this }); + }, + _build_view_fields_values: function() { + var a_dataset = this.view.dataset; + var fields_values = this.view.get_fields_values(); + var parent_values = a_dataset.parent_view ? a_dataset.parent_view.get_fields_values() : {}; + fields_values.parent = parent_values; + return fields_values; + }, + _build_eval_context: function() { + var a_dataset = this.view.dataset; + return new openerp.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values()); + }, + /** + * Builds a new context usable for operations related to fields by merging + * the fields'context with the action's context. + */ + build_context: function() { + var f_context = (this.field || {}).context || {}; + if (!!f_context.__ref) { + var fields_values = this._build_eval_context(); + f_context = new openerp.web.CompoundDomain(f_context).set_eval_context(fields_values); + } + // maybe the default_get should only be used when we do a default_get? + var v_contexts = _.compact([this.node.attrs.default_get || null, + this.node.attrs.context || null]); + var v_context = new openerp.web.CompoundContext(); + _.each(v_contexts, function(x) {v_context.add(x);}); + if (_.detect(v_contexts, function(x) {return !!x.__ref;})) { + var fields_values = this._build_eval_context(); + v_context.set_eval_context(fields_values); + } + // if there is a context on the node, overrides the model's context + var ctx = v_contexts.length > 0 ? v_context : f_context; + return ctx; + }, + build_domain: function() { + var f_domain = this.field.domain || []; + var n_domain = this.node.attrs.domain || null; + // if there is a domain on the node, overrides the model's domain + var final_domain = n_domain !== null ? n_domain : f_domain; + if (!(final_domain instanceof Array)) { + var fields_values = this._build_eval_context(); + final_domain = new openerp.web.CompoundDomain(final_domain).set_eval_context(fields_values); + } + return final_domain; } }); @@ -956,9 +1001,16 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ }, on_confirmed: function() { var self = this; + + var context = this.node.attrs.context; + if (context && context.__ref) { + context = new openerp.web.CompoundContext(context); + context.set_eval_context(this._build_eval_context()); + } return this.view.do_execute_action( - this.node.attrs, this.view.dataset, this.view.datarecord.id, function () { + _.extend({}, this.node.attrs, {context: context}), + this.view.dataset, this.view.datarecord.id, function () { self.view.reload(); }); }, @@ -1105,51 +1157,6 @@ openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.f this.invalid = false; }, focus: function() { - }, - _build_view_fields_values: function() { - var a_dataset = this.view.dataset; - var fields_values = this.view.get_fields_values(); - var parent_values = a_dataset.parent_view ? a_dataset.parent_view.get_fields_values() : {}; - fields_values.parent = parent_values; - return fields_values; - }, - _build_eval_context: function() { - var a_dataset = this.view.dataset; - return new openerp.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values()); - }, - /** - * Builds a new context usable for operations related to fields by merging - * the fields'context with the action's context. - */ - build_context: function() { - var f_context = this.field.context || {}; - if (!!f_context.__ref) { - var fields_values = this._build_eval_context(); - f_context = new openerp.web.CompoundDomain(f_context).set_eval_context(fields_values); - } - // maybe the default_get should only be used when we do a default_get? - var v_contexts = _.compact([this.node.attrs.default_get || null, - this.node.attrs.context || null]); - var v_context = new openerp.web.CompoundContext(); - _.each(v_contexts, function(x) {v_context.add(x);}); - if (_.detect(v_contexts, function(x) {return !!x.__ref;})) { - var fields_values = this._build_eval_context(); - v_context.set_eval_context(fields_values); - } - // if there is a context on the node, overrides the model's context - var ctx = v_contexts.length > 0 ? v_context : f_context; - return ctx; - }, - build_domain: function() { - var f_domain = this.field.domain || []; - var n_domain = this.node.attrs.domain || null; - // if there is a domain on the node, overrides the model's domain - var final_domain = n_domain !== null ? n_domain : f_domain; - if (!(final_domain instanceof Array)) { - var fields_values = this._build_eval_context(); - final_domain = new openerp.web.CompoundDomain(final_domain).set_eval_context(fields_values); - } - return final_domain; } }); -- cgit v1.2.3 From 15e73da3304b9771baa33d22699d0d821be90b12 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 13 Oct 2011 10:51:00 +0200 Subject: [FIX] FormView.on_saved should resolve on a result, ideally the same as FormView.on_created minus the 'created' key bzr revid: xmo@openerp.com-20111013085100-xpl29e2f2jnqmt1v --- addons/web/static/src/js/view_form.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 7e5871166dc..8bc31d4e015 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -451,7 +451,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# return $.Deferred().reject(); } else { this.reload(); - return $.when().then(success); + return $.when(r).then(success); } }, /** @@ -485,7 +485,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.sidebar.attachments.do_update(); } console.debug("The record has been created with id #" + this.datarecord.id); - this.reload() + this.reload(); return $.when(_.extend(r, {created: true})).then(success); } }, -- cgit v1.2.3 From 937c881aaa746f267e00546b8da3be5be3515053 Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Thu, 13 Oct 2011 14:27:58 +0530 Subject: [FIX] Fixed the issue for confirmation popup when we delete a record from a list lp bug: https://launchpad.net/bugs/872708 fixed bzr revid: tpa@tinyerp.com-20111013085758-el0bn170ai0h6wfc --- addons/web/static/src/js/view_list.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 0ea1f7ec944..dde99b459c5 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -463,7 +463,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# * @param {Array} ids the ids of the records to delete */ do_delete: function (ids) { - if (!ids.length) { + if (!ids.length || !confirm(" Are you sure to remove those records ?")) { return; } var self = this; -- cgit v1.2.3 From ddb9a163770f30625dd9c45c5fca38e9a750cc50 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 13 Oct 2011 11:17:38 +0200 Subject: [IMP] change cursor when loading bzr revid: chs@openerp.com-20111013091738-l1vmy572zic3wg7i --- addons/web/static/src/js/chrome.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index dae7ba62ceb..7b3dc54b1c2 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -194,8 +194,10 @@ openerp.web.Loading = openerp.web.Widget.extend(/** @lends openerp.web.Loading# //this.$element.html(QWeb.render("Loading", {})); this.$element.html("Loading ("+this.count+")"); this.$element.show(); + this.widget_parent.$element.addClass('loading'); } else { this.$element.fadeOut(); + this.widget_parent.$element.removeClass('loading'); } } }); -- cgit v1.2.3 From 00b269d1c0a3507a01a296587e96bcb9e8e6da86 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 13 Oct 2011 12:26:53 +0200 Subject: [IMP] nivification of Notification Widget bzr revid: chs@openerp.com-20111013102653-wox1v4o9mfplzt2b --- addons/web/static/src/js/chrome.js | 56 ++++++++++++++++++++++++----------- addons/web/static/src/js/search.js | 2 +- addons/web/static/src/js/view_form.js | 12 ++++---- addons/web/static/src/js/views.js | 2 +- 4 files changed, 47 insertions(+), 25 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 579a95b1bad..2b35fae540f 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -5,15 +5,11 @@ openerp.web.chrome = function(openerp) { var QWeb = openerp.web.qweb; openerp.web.Notification = openerp.web.Widget.extend(/** @lends openerp.web.Notification# */{ - /** - * @constructs openerp.web.Notification - * @extends openerp.web.Widget - * - * @param parent - * @param element_id - */ - init: function(parent, element_id) { - this._super(parent, element_id); + template: 'Notification', + identifier_prefix: 'notification-', + + start: function() { + this._super.apply(this, arguments); this.$element.notify({ speed: 500, expires: 1500 @@ -32,9 +28,36 @@ openerp.web.Notification = openerp.web.Widget.extend(/** @lends openerp.web.Not }, { expires: false, }); - } + }, + + do_notify: function() { this.notify.apply(this, arguments); }, + do_warn: function() {this.warn.apply(this, arguments); }, + +}); + +openerp.web.NotifiableWidget = openerp.web.Widget.extend({ + + init: function(/*arguments*/) { + this._super.apply(this, arguments); + this.notification = new openerp.web.Notification(this); + }, + + start: function() { + this._super.apply(this, arguments); + this.notification.prependTo(this.$element); + }, + + stop: function() { + this.notification.stop(); + return this._super.apply(this, arguments); + }, + + do_notify: function() { this.notification.notify.apply(this.notification, arguments); }, + do_warn: function() { this.notification.warn.apply(this.notification, arguments); }, }); + + openerp.web.Dialog = openerp.web.OldWidget.extend(/** @lends openerp.web.Dialog# */{ dialog_title: "", identifier_prefix: 'dialog', @@ -371,7 +394,7 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database } $db_list.find(':selected').remove(); self.db_list.splice(_.indexOf(self.db_list, db, true), 1); - self.notification.notify("Dropping database", "The database '" + db + "' has been dropped"); + self.do_notify("Dropping database", "The database '" + db + "' has been dropped"); }); } }); @@ -456,7 +479,7 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database self.display_error(result); return; } - self.notification.notify("Changed Password", "Password has been changed successfully"); + self.do_notify("Changed Password", "Password has been changed successfully"); }); } }); @@ -922,7 +945,7 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ } }); -openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClient */{ +openerp.web.WebClient = openerp.web.NotifiableWidget.extend(/** @lends openerp.web.WebClient */{ /** * @constructs openerp.web.WebClient * @extends openerp.web.Widget @@ -945,9 +968,6 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie this.crashmanager = new openerp.web.CrashManager(this); this.crashmanager.start(); - // Do you autorize this ? will be replaced by notify() in controller - openerp.web.Widget.prototype.notification = new openerp.web.Notification(this, "oe_notification"); - this.header = new openerp.web.Header(this); this.login = new openerp.web.Login(this); this.header.on_logout.add(this.login.on_logout); @@ -967,6 +987,7 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie }, start: function() { + this._super.apply(this, arguments); this.header.appendTo($("#oe_header")); this.session.start(); this.login.appendTo($('#oe_login')); @@ -1060,7 +1081,8 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie this.action_manager.do_action(action); }, do_about: function() { - } + }, + }); }; diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 9cab0ade9d0..2769a860d2a 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -336,7 +336,7 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search * @param {Array} errors a never-empty array of error objects */ on_invalid: function (errors) { - this.notification.notify("Invalid Search", "triggered from search view"); + this.do_notify("Invalid Search", "triggered from search view"); }, do_clear: function () { this.$element.find('.filter_label, .filter_icon').removeClass('enabled'); diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index b0dce062519..e3f147d1e4d 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -443,7 +443,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# } }); msg += "
"; - this.notification.warn("The following fields are invalid :", msg); + this.do_warn("The following fields are invalid :", msg); }, on_saved: function(r, success) { if (!r.result) { @@ -616,7 +616,7 @@ openerp.web.form.SidebarAttachments = openerp.web.Widget.extend({ ids: [parseInt($e.attr('data-id'))] }, function(r) { $e.parent().remove(); - self.notification.notify("Delete an attachment", "The attachment '" + name + "' has been deleted"); + self.do_notify("Delete an attachment", "The attachment '" + name + "' has been deleted"); }); } } @@ -1195,7 +1195,7 @@ openerp.web.form.FieldEmail = openerp.web.form.FieldChar.extend({ }, on_button_clicked: function() { if (!this.value || !this.is_valid()) { - this.notification.warn("E-mail error", "Can't send email to invalid e-mail address"); + this.do_warn("E-mail error", "Can't send email to invalid e-mail address"); } else { location.href = 'mailto:' + this.value; } @@ -1210,7 +1210,7 @@ openerp.web.form.FieldUrl = openerp.web.form.FieldChar.extend({ }, on_button_clicked: function() { if (!this.value) { - this.notification.warn("Resource error", "This resource is empty"); + this.do_warn("Resource error", "This resource is empty"); } else { window.open(this.value); } @@ -2626,7 +2626,7 @@ openerp.web.form.FieldBinary = openerp.web.form.Field.extend({ on_file_uploaded: function(size, name, content_type, file_base64) { delete(window[this.iframe]); if (size === false) { - this.notification.warn("File Upload", "There was a problem while uploading your file"); + this.do_warn("File Upload", "There was a problem while uploading your file"); // TODO: use openerp web crashmanager console.warn("Error while uploading file : ", name); } else { @@ -2640,7 +2640,7 @@ openerp.web.form.FieldBinary = openerp.web.form.Field.extend({ }, on_save_as: function() { if (!this.view.datarecord.id) { - this.notification.warn("Can't save file", "The record has not yet been saved"); + this.do_warn("Can't save file", "The record has not yet been saved"); } else { var url = '/web/binary/saveas?session_id=' + this.session.session_id + '&model=' + this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name + diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 006213086be..a26063c1fc7 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -902,7 +902,7 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ if (this.fields_view && this.fields_view.arch) { $('' + db.web.json_node_to_xml(this.fields_view.arch, true) + '').dialog({ width: '95%', height: 600}); } else { - this.notification.warn("Manage Views", "Could not find current view declaration"); + this.do_warn("Manage Views", "Could not find current view declaration"); } }, on_sidebar_edit_workflow: function() { -- cgit v1.2.3 From 4dc731f99c4ee5ad90635f09b0eb70c2025e151d Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 13 Oct 2011 13:27:55 +0200 Subject: [FIX] BufferedDataSet to not break the m2o read contract of returning a name_get format BufferedDataSet simply shoves stuff read() or create()d in its cache, but m2o is asymmetric: client writes a single id, but reads a pair of [id, name]. Since create() and write() are async (by definition) it's the best place to check if the data being written contains any m2o field, and to fix those m2o values. bzr revid: xmo@openerp.com-20111013112755-krf9y5w232ol6r1e --- addons/web/static/src/js/data.js | 130 ++++++++++++++++++++++++++++++--------- 1 file changed, 100 insertions(+), 30 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index ea0824fb1df..0906a26050e 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -610,44 +610,114 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ on_default_get: function(res) { this.last_default_get = res; }, + /** + * Makes sure this dataset has the fields_get for its model stored locally, + * so create/write methods are able to determine if written fields are m2os + * and can name_get those fields if that's the case (in order to cache a + * correct m2o value for them) + * + * @returns {$.Deferred} whether the fields_get is done executing, provides the fields_get value to its callbacks + */ + ensure_has_fields: function () { + var self = this; + + if (this.fields_get) { + var d = $.Deferred(); + setTimeout(function () { d.resolve(self.fields_get, true); }, 0); + return d.promise(); + } else { + return self.call('fields_get', [], function (fields_get) { + self.fields_get = fields_get; + }); + } + }, + /** + * Relational fields may not be written in the same format they are read. + * + * Since the BufferedDataSet is a bit dumb, it returns what it's got stored + * in its cache, which for modified value is what it was given. This breaks + * some basic contracts of openerp such as m2o read being in the + * ``name_get`` format. + * + * Because create & write are supposed to be asynchronous, though, it + * should be easy to just name_get all incorrect values. + * + * @param {Object} data form-data to write to the cache + * @returns {$.Deferred} resolved with a fixed data dictionary + */ + fix_relational: function (data) { + var self = this; + var results = $.Deferred(); + this.ensure_has_fields().then(function (fields) { + var fields_to_fix = _(fields).chain() + .map(function (d, k) { return {key: k, descriptor: d}; }) + .filter(function (field) { + // keep m2o fields which are in the data dict + return field.descriptor.type === 'many2one' && + field.key in data; + }).pluck('key') + .value(); + var name_gets = _(fields_to_fix).map(function (field) { + return new openerp.web.DataSet(self, self.fields_get[field].relation) + .name_get([data[field]], null); + }); + $.when.apply(null, name_gets).then(function () { + var record = _.extend({}, data); + for(var i=0; i Date: Thu, 13 Oct 2011 13:44:49 +0200 Subject: [FIX] BufferedDataSet to not break the m2o read contract of returning a name_get format BufferedDataSet simply shoves stuff read() or create()d in its cache, but m2o is asymmetric: client writes a single id, but reads a pair of [id, name]. Since create() and write() are async (by definition) it's the best place to check if the data being written contains any m2o field, and to fix those m2o values. This, however, completely breaks o2m fields get_value(), and doesn't even work correctly for create() calls. Should probably not cache the same thing we put for creation or update eh bzr revid: xmo@openerp.com-20111013114449-rkhe95g1oi3gudab --- addons/web/static/src/js/data.js | 130 ++++++++++++++++++++++++++++++--------- 1 file changed, 100 insertions(+), 30 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index ea0824fb1df..79485497fdd 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -610,44 +610,114 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ on_default_get: function(res) { this.last_default_get = res; }, + /** + * Makes sure this dataset has the fields_get for its model stored locally, + * so create/write methods are able to determine if written fields are m2os + * and can name_get those fields if that's the case (in order to cache a + * correct m2o value for them) + * + * @returns {$.Deferred} whether the fields_get is done executing, provides the fields_get value to its callbacks + */ + ensure_has_fields: function () { + var self = this; + + if (this.fields_get) { + var d = $.Deferred(); + setTimeout(function () { d.resolve(self.fields_get, true); }, 0); + return d.promise(); + } else { + return self.call('fields_get', [], function (fields_get) { + self.fields_get = fields_get; + }); + } + }, + /** + * Relational fields may not be written in the same format they are read. + * + * Since the BufferedDataSet is a bit dumb, it returns what it's got stored + * in its cache, which for modified value is what it was given. This breaks + * some basic contracts of openerp such as m2o read being in the + * ``name_get`` format. + * + * Because create & write are supposed to be asynchronous, though, it + * should be easy to just name_get all incorrect values. + * + * @param {Object} data form-data to write to the cache + * @returns {$.Deferred} resolved with a fixed data dictionary + */ + fix_relational: function (data) { + var self = this; + var results = $.Deferred(); + this.ensure_has_fields().then(function (fields) { + var fields_to_fix = _(fields).chain() + .map(function (d, k) { return {key: k, descriptor: d}; }) + .filter(function (field) { + // keep m2o fields which are in the data dict + return field.descriptor.type === 'many2one' && + field.key in data; + }).pluck('key') + .value(); + var name_gets = _(fields_to_fix).map(function (field) { + return new openerp.web.DataSet(self, self.fields_get[field].relation) + .name_get([data[field]], null); + }); + $.when.apply(null, name_gets).then(function () { + var record = _.extend({}, data); + for(var i=0; i Date: Thu, 13 Oct 2011 13:58:28 +0200 Subject: [fix] When we click a button in a m2o popup it closes the popup lp bug: https://launchpad.net/bugs/873272 fixed bzr revid: nicolas.vanhoren@openerp.com-20111013115828-ctbslk34qif4cfwt --- addons/web/static/src/js/view_form.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 8bc31d4e015..fce00e797c0 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2483,7 +2483,6 @@ openerp.web.form.FormOpenPopup = openerp.web.OldWidget.extend(/** @lends openerp this.setup_form_view(); }, on_write: function(id, data) { - this.stop(); if (!this.options.auto_write) return; var self = this; @@ -2506,7 +2505,9 @@ openerp.web.form.FormOpenPopup = openerp.web.OldWidget.extend(/** @lends openerp $buttons.html(QWeb.render("FormOpenPopup.form.buttons")); var $nbutton = $buttons.find(".oe_formopenpopup-form-save"); $nbutton.click(function() { - self.view_form.do_save(); + self.view_form.do_save().then(function() { + self.stop(); + }); }); var $cbutton = $buttons.find(".oe_formopenpopup-form-close"); $cbutton.click(function() { -- cgit v1.2.3 From 3580fb918da451a379c28d31839036c7735f53d8 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 13 Oct 2011 14:42:27 +0200 Subject: [FIX] inconsistency between multiple m2o fields to name_get and single when sent to $.when bzr revid: xmo@openerp.com-20111013124227-at1nvix8yqtae8a9 --- addons/web/static/src/js/data.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index 79485497fdd..a9c4319baa8 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -661,10 +661,16 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ return new openerp.web.DataSet(self, self.fields_get[field].relation) .name_get([data[field]], null); }); - $.when.apply(null, name_gets).then(function () { + // null-concat forces stupid bastard `when` to always return an + // array containing the Array-ified results of all the name_gets. + // otherwise, if there's a single field to fix it returns the + // results of the unique name_get directly. + $.when.apply(null, name_gets.concat([null])).then(function () { var record = _.extend({}, data); for(var i=0; i Date: Thu, 13 Oct 2011 14:44:35 +0200 Subject: [FIX] excessive coherence between BufferedDataSet cache and to_write and to_create queues ~/projects/tiny/web/current cache should hold readable values (so pairs for m2o fields), whereas to_create and to_write hold the data which will be processed into o2m commands and sent over the wire to create, write and context-value calls. As a result, to_create and to_write should only have atomic ids for m2o fields. Therefore, only use fixed m2o values to store in read cache. bzr revid: xmo@openerp.com-20111013124435-vbjolacjnc9f6qz4 --- addons/web/static/src/js/data.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index a9c4319baa8..dd121ed9db7 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -680,14 +680,14 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ create: function(data, callback, error_callback) { var self = this; var prom = $.Deferred().then(callback); - this.fix_relational(data).then(function (fixed_data) { + this.fix_relational(data).then(function (fixed_m2o_data) { var cached = { id:_.uniqueId(self.virtual_id_prefix), - values: fixed_data, + values: fixed_m2o_data, defaults: self.last_default_get }; self.to_create.push(_.extend(_.clone(cached), { - values: _.clone(cached.values)})); + values: _.clone(data)})); self.cache.push(cached); self.on_change(); prom.resolve({result: cached.id}); @@ -697,21 +697,21 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ write: function (id, data, options, callback) { var self = this; var to_return = $.Deferred().then(callback); - this.fix_relational(data).then(function (fixed_data) { + this.fix_relational(data).then(function (fixed_m2o_data) { var record = _.detect(self.to_create, function(x) {return x.id === id;}); record = record || _.detect(self.to_write, function(x) {return x.id === id;}); var dirty = false; if (record) { - for (var k in fixed_data) { - if (record.values[k] === undefined || record.values[k] !== fixed_data[k]) { + for (var k in data) { + if (record.values[k] === undefined || record.values[k] !== data[k]) { dirty = true; break; } } - $.extend(record.values, fixed_data); + _.extend(record.values, data); } else { dirty = true; - record = {id: id, values: fixed_data}; + record = {id: id, values: data}; self.to_write.push(record); } var cached = _.detect(self.cache, function(x) {return x.id === id;}); @@ -719,7 +719,7 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ cached = {id: id, values: {}}; this.cache.push(cached); } - $.extend(cached.values, record.values); + _.extend(cached.values, fixed_m2o_data); if (dirty) self.on_change(); to_return.resolve({result: true}); -- cgit v1.2.3 From ce6c86ccc8134c56861b43b9c8b68be5ec13b1be Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 13 Oct 2011 14:47:19 +0200 Subject: [REV] xmo@openerp.com-20111013112755-krf9y5w232ol6r1e, it's broken, going to merge improved/fixed version bzr revid: xmo@openerp.com-20111013124719-ekwfczj45bgkoeiy --- addons/web/static/src/js/data.js | 130 +++++++++------------------------------ 1 file changed, 30 insertions(+), 100 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index 0906a26050e..ea0824fb1df 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -610,114 +610,44 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ on_default_get: function(res) { this.last_default_get = res; }, - /** - * Makes sure this dataset has the fields_get for its model stored locally, - * so create/write methods are able to determine if written fields are m2os - * and can name_get those fields if that's the case (in order to cache a - * correct m2o value for them) - * - * @returns {$.Deferred} whether the fields_get is done executing, provides the fields_get value to its callbacks - */ - ensure_has_fields: function () { - var self = this; - - if (this.fields_get) { - var d = $.Deferred(); - setTimeout(function () { d.resolve(self.fields_get, true); }, 0); - return d.promise(); - } else { - return self.call('fields_get', [], function (fields_get) { - self.fields_get = fields_get; - }); - } - }, - /** - * Relational fields may not be written in the same format they are read. - * - * Since the BufferedDataSet is a bit dumb, it returns what it's got stored - * in its cache, which for modified value is what it was given. This breaks - * some basic contracts of openerp such as m2o read being in the - * ``name_get`` format. - * - * Because create & write are supposed to be asynchronous, though, it - * should be easy to just name_get all incorrect values. - * - * @param {Object} data form-data to write to the cache - * @returns {$.Deferred} resolved with a fixed data dictionary - */ - fix_relational: function (data) { - var self = this; - var results = $.Deferred(); - this.ensure_has_fields().then(function (fields) { - var fields_to_fix = _(fields).chain() - .map(function (d, k) { return {key: k, descriptor: d}; }) - .filter(function (field) { - // keep m2o fields which are in the data dict - return field.descriptor.type === 'many2one' && - field.key in data; - }).pluck('key') - .value(); - var name_gets = _(fields_to_fix).map(function (field) { - return new openerp.web.DataSet(self, self.fields_get[field].relation) - .name_get([data[field]], null); - }); - $.when.apply(null, name_gets).then(function () { - var record = _.extend({}, data); - for(var i=0; i Date: Thu, 13 Oct 2011 14:58:58 +0200 Subject: [FIX] when performing name_get on m2o fields being written to BufferedDataSet, ignore m2o fields with 'false' value as well as those not being written at all bzr revid: xmo@openerp.com-20111013125858-pboz81w3s58lk2rl --- addons/web/static/src/js/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index dd121ed9db7..1eaffcd0e30 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -654,7 +654,7 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ .filter(function (field) { // keep m2o fields which are in the data dict return field.descriptor.type === 'many2one' && - field.key in data; + data[field.key]; }).pluck('key') .value(); var name_gets = _(fields_to_fix).map(function (field) { -- cgit v1.2.3 From 4065bc83b309a8bec16fb5f316b6feab8de0a981 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 13 Oct 2011 15:46:06 +0200 Subject: [FIX] Problem with action buttons in form views opened from a m2o in an editable list bzr revid: fme@openerp.com-20111013134606-8n8i1djtg0dvcar6 --- addons/web/static/src/js/view_list_editable.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index 826508eaa27..4cc081a6266 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -194,7 +194,7 @@ openerp.web.list_editable = function (openerp) { } self.edition = true; self.edition_id = record_id; - self.edition_form = _.extend(new openerp.web.ListEditableFormView(self, self.dataset, false), { + self.edition_form = _.extend(new openerp.web.ListEditableFormView(self.view, self.dataset, false), { form_template: 'ListView.row.form', registry: openerp.web.list.form.widgets, $element: $new_row -- cgit v1.2.3 From de5c2f58e81fefb2f5d23124f5b44ee00ec16da1 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 13 Oct 2011 17:03:17 +0200 Subject: [IMP] Notification Widget is now a singleton bzr revid: chs@openerp.com-20111013150317-kzy2h7bz407kiugz --- addons/web/static/src/js/chrome.js | 37 +++++++++++++++---------------------- addons/web/static/src/js/core.js | 12 ------------ 2 files changed, 15 insertions(+), 34 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 2b35fae540f..1629dc1de55 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -8,6 +8,11 @@ openerp.web.Notification = openerp.web.Widget.extend(/** @lends openerp.web.Not template: 'Notification', identifier_prefix: 'notification-', + init: function() { + this._super.apply(this, arguments); + openerp.notification = this; + }, + start: function() { this._super.apply(this, arguments); this.$element.notify({ @@ -29,35 +34,21 @@ openerp.web.Notification = openerp.web.Widget.extend(/** @lends openerp.web.Not expires: false, }); }, - - do_notify: function() { this.notify.apply(this, arguments); }, - do_warn: function() {this.warn.apply(this, arguments); }, }); -openerp.web.NotifiableWidget = openerp.web.Widget.extend({ - - init: function(/*arguments*/) { - this._super.apply(this, arguments); - this.notification = new openerp.web.Notification(this); +openerp.web.Widget.include({ + do_notify: function() { + var n = openerp.notification; + n.notify.apply(n, arguments); }, - - start: function() { - this._super.apply(this, arguments); - this.notification.prependTo(this.$element); - }, - - stop: function() { - this.notification.stop(); - return this._super.apply(this, arguments); + do_warn: function() { + var n = openerp.notification; + n.warn.apply(n, arguments); }, - - do_notify: function() { this.notification.notify.apply(this.notification, arguments); }, - do_warn: function() { this.notification.warn.apply(this.notification, arguments); }, }); - openerp.web.Dialog = openerp.web.OldWidget.extend(/** @lends openerp.web.Dialog# */{ dialog_title: "", identifier_prefix: 'dialog', @@ -945,7 +936,7 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ } }); -openerp.web.WebClient = openerp.web.NotifiableWidget.extend(/** @lends openerp.web.WebClient */{ +openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClient */{ /** * @constructs openerp.web.WebClient * @extends openerp.web.Widget @@ -963,6 +954,7 @@ openerp.web.WebClient = openerp.web.NotifiableWidget.extend(/** @lends openerp.w } this.$element.html(QWeb.render("Interface", params)); + this.notification = new openerp.web.Notification(); this.session = new openerp.web.Session(); this.loading = new openerp.web.Loading(this,"oe_loading"); this.crashmanager = new openerp.web.CrashManager(this); @@ -988,6 +980,7 @@ openerp.web.WebClient = openerp.web.NotifiableWidget.extend(/** @lends openerp.w }, start: function() { this._super.apply(this, arguments); + this.notification.prependTo(this.$element); this.header.appendTo($("#oe_header")); this.session.start(); this.login.appendTo($('#oe_login')); diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index bed5f199157..755413c1aea 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -949,18 +949,6 @@ openerp.web.Widget = openerp.web.SessionAware.extend(/** @lends openerp.web.Widg } return false; }, - do_notify: function() { - if (this.widget_parent) { - return this.widget_parent.do_notify.apply(this,arguments); - } - return false; - }, - do_warn: function() { - if (this.widget_parent) { - return this.widget_parent.do_warn.apply(this,arguments); - } - return false; - }, rpc: function(url, data, success, error) { var def = $.Deferred().then(success, error); var self = this; -- cgit v1.2.3 From 7dd8fcfad4acc09fa4c7ba92824d0a0e3229c11f Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 13 Oct 2011 17:30:23 +0200 Subject: [IMP] do_notify and do_warn bubble the messages to the parent widget bzr revid: chs@openerp.com-20111013153023-xzu2y4j5qzuqem1e --- addons/web/static/src/js/chrome.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 1629dc1de55..234d99fdb34 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -39,12 +39,14 @@ openerp.web.Notification = openerp.web.Widget.extend(/** @lends openerp.web.Not openerp.web.Widget.include({ do_notify: function() { - var n = openerp.notification; - n.notify.apply(n, arguments); + if(this.widget_parent) { + this.widget_parent.do_notify.apply(this.widget_parent, arguments); + } }, do_warn: function() { - var n = openerp.notification; - n.warn.apply(n, arguments); + if(this.widget_parent) { + this.widget_parent.do_warn.apply(this.widget_parent, arguments); + } }, }); @@ -986,6 +988,16 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie this.login.appendTo($('#oe_login')); this.menu.start(); }, + + do_notify: function() { + var n = this.notification; + n.notify.apply(n, arguments); + }, + do_warn: function() { + var n = this.notification; + n.warn.apply(n, arguments); + }, + on_logged: function() { this.menu.do_reload(); if(this.action_manager) -- cgit v1.2.3 From 57d635f44df6767c849bfaf6e8e9c27a31e9cfa3 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Fri, 14 Oct 2011 01:20:54 +0200 Subject: [FIX] soft reload after module installation lp bug: https://launchpad.net/bugs/873362 fixed bzr revid: al@openerp.com-20111013232054-2i5ptzfurjc429zw --- addons/web/static/src/js/chrome.js | 4 ++++ addons/web/static/src/js/views.js | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index dae7ba62ceb..521dc6edc2b 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -970,6 +970,10 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie this.login.appendTo($('#oe_login')); this.menu.start(); }, + do_reload: function() { + this.session.session_restore(); + this.menu.do_reload(); + }, on_logged: function() { this.menu.do_reload(); if(this.action_manager) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 006213086be..cfeb1aa730b 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -123,8 +123,8 @@ db.web.ActionManager = db.web.Widget.extend({ } if (this.dialog && action.context) { var model = action.context.active_model; - if (model === 'base.module.upgrade' || model === 'base.setup.installer') { - db.webclient.menu.do_reload(); + if (model === 'base.module.upgrade' || model === 'base.setup.installer' || model === 'base.module.upgrade') { + db.webclient.do_reload(); } } this.dialog_stop(); -- cgit v1.2.3 From 405beaa3c6cde0c365530c415aea9ce5ff764497 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 14 Oct 2011 10:43:10 +0200 Subject: [FIX] m2o values display in list views (mostly under onchange condition) Normal m2o values are pairs of (id, name) (name_get format, basically) but in some cases (lazyness & al), APIs (often onchange results) only return the `id` part, which is not sufficient to display the m2o as-is, a name_get has to be performed. Added an intermediate step in displaying a table cell (in list view): if we're displaying an m2o cell (~a cell for an m2o column) and the value is a number, then dispatch a name_get and keep trucking (display the rows without the m2o values). When the name_get returns, it will simply refresh the row and diplay the m2o name. bzr revid: xmo@openerp.com-20111014084310-pv2mmmy28fwwk9sm --- addons/web/static/src/js/view_list.js | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 0ea1f7ec944..e62dcdc2fd9 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -785,6 +785,26 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis [this.records.at(this.dataset.index).get('id'), this.dataset]); }, + render_cell: function (record, column) { + if (column.type === 'many2one') { + var value = record.get(column.id); + // m2o values are usually name_get formatted, [Number, String] + // pairs, but in some cases only the id is provided. In these + // cases, we need to perform a name_get call to fetch the actual + // displayable value + if (typeof value === 'number' || value instanceof Number) { + // fetch the name, set it on the record (in the right field) + // and let the various registered events handle refreshing the + // row + new openerp.web.DataSet(this.view, column.relation) + .name_get([value], function (names) { + if (!names.length) { return; } + record.set(column.id, names[0]); + }); + } + } + return openerp.web.format_cell(record.toForm().data, column); + }, render: function () { if (this.$current) { this.$current.remove(); @@ -792,7 +812,7 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis this.$current = this.$_element.clone(true); this.$current.empty().append( QWeb.render('ListView.rows', _.extend({ - render_cell: openerp.web.format_cell}, this))); + render_cell: $.proxy(this, 'render_cell')}, this))); this.pad_table_to(5); }, pad_table_to: function (count) { @@ -900,7 +920,7 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis record: record, row_parity: (index % 2 === 0) ? 'even' : 'odd', view: this.view, - render_cell: openerp.web.format_cell + render_cell: $.proxy(this, 'render_cell') }); }, /** -- cgit v1.2.3 From f786f5537a8fbd36014985c930485d7d66ad0fb4 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 14 Oct 2011 10:49:41 +0200 Subject: [FIX] method call invocation indentation bzr revid: xmo@openerp.com-20111014084941-cj85qsl9tfbxsvhp --- addons/web/static/src/js/view_list.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index e62dcdc2fd9..a97c249bfaf 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -797,7 +797,7 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis // and let the various registered events handle refreshing the // row new openerp.web.DataSet(this.view, column.relation) - .name_get([value], function (names) { + .name_get([value], function (names) { if (!names.length) { return; } record.set(column.id, names[0]); }); -- cgit v1.2.3 From 557895f275e785548e91d624c7a5575d612c9052 Mon Sep 17 00:00:00 2001 From: "Kunal Chavda (OpenERP)" Date: Fri, 14 Oct 2011 16:51:01 +0530 Subject: [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(-) (limited to 'addons/web/static/src/js') 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(); }); -- cgit v1.2.3 From 59b21310e899e7d75eeb6a906af61f8511ef45ce Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 14 Oct 2011 17:49:50 +0200 Subject: [FIX] typo bzr revid: chs@openerp.com-20111014154950-5c805sb1dcff98l4 --- addons/web/static/src/js/chrome.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 588c065b03b..69c9466a9ce 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -466,7 +466,7 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database }); openerp.web.Login = openerp.web.Widget.extend(/** @lends openerp.web.Login# */{ - remember_creditentials: true, + remember_credentials: true, template: "Login", identifier_prefix: 'oe-app-login-', @@ -484,7 +484,7 @@ openerp.web.Login = openerp.web.Widget.extend(/** @lends openerp.web.Login# */{ this.selected_db = null; this.selected_login = null; - if (this.has_local_storage && this.remember_creditentials) { + if (this.has_local_storage && this.remember_credentials) { this.selected_db = localStorage.getItem('last_db_login_success'); this.selected_login = localStorage.getItem('last_login_login_success'); if (jQuery.deparam(jQuery.param.querystring()).debug != undefined) { @@ -550,7 +550,7 @@ openerp.web.Login = openerp.web.Widget.extend(/** @lends openerp.web.Login# */{ this.session.session_login(db, login, password, function() { if(self.session.session_is_valid()) { if (self.has_local_storage) { - if(self.remember_creditentials) { + if(self.remember_credentials) { localStorage.setItem('last_db_login_success', db); localStorage.setItem('last_login_login_success', login); if (jQuery.deparam(jQuery.param.querystring()).debug != undefined) { -- cgit v1.2.3 From 2915308f6c6f678aead0c7a31ed337239c6eabc8 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 17 Oct 2011 08:15:54 +0200 Subject: [REV] xmo@openerp.com-20111013124912-wton5lidyvaezsj6 see: niv bzr revid: xmo@openerp.com-20111017061554-ijg5uwg2val9hu2h --- addons/web/static/src/js/data.js | 136 +++++++++------------------------------ 1 file changed, 30 insertions(+), 106 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index 1eaffcd0e30..ea0824fb1df 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -610,120 +610,44 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ on_default_get: function(res) { this.last_default_get = res; }, - /** - * Makes sure this dataset has the fields_get for its model stored locally, - * so create/write methods are able to determine if written fields are m2os - * and can name_get those fields if that's the case (in order to cache a - * correct m2o value for them) - * - * @returns {$.Deferred} whether the fields_get is done executing, provides the fields_get value to its callbacks - */ - ensure_has_fields: function () { - var self = this; - - if (this.fields_get) { - var d = $.Deferred(); - setTimeout(function () { d.resolve(self.fields_get, true); }, 0); - return d.promise(); - } else { - return self.call('fields_get', [], function (fields_get) { - self.fields_get = fields_get; - }); - } - }, - /** - * Relational fields may not be written in the same format they are read. - * - * Since the BufferedDataSet is a bit dumb, it returns what it's got stored - * in its cache, which for modified value is what it was given. This breaks - * some basic contracts of openerp such as m2o read being in the - * ``name_get`` format. - * - * Because create & write are supposed to be asynchronous, though, it - * should be easy to just name_get all incorrect values. - * - * @param {Object} data form-data to write to the cache - * @returns {$.Deferred} resolved with a fixed data dictionary - */ - fix_relational: function (data) { - var self = this; - var results = $.Deferred(); - this.ensure_has_fields().then(function (fields) { - var fields_to_fix = _(fields).chain() - .map(function (d, k) { return {key: k, descriptor: d}; }) - .filter(function (field) { - // keep m2o fields which are in the data dict - return field.descriptor.type === 'many2one' && - data[field.key]; - }).pluck('key') - .value(); - var name_gets = _(fields_to_fix).map(function (field) { - return new openerp.web.DataSet(self, self.fields_get[field].relation) - .name_get([data[field]], null); - }); - // null-concat forces stupid bastard `when` to always return an - // array containing the Array-ified results of all the name_gets. - // otherwise, if there's a single field to fix it returns the - // results of the unique name_get directly. - $.when.apply(null, name_gets.concat([null])).then(function () { - var record = _.extend({}, data); - for(var i=0; i Date: Mon, 17 Oct 2011 09:24:01 +0200 Subject: [FIX] handle common case where action_data has no context, and should not be added to the compoundcontext issue introduced in revision xmo@openerp.com-20111014122020-n3uz31ilemt1lvro bzr revid: xmo@openerp.com-20111017072401-qfreccymm5bn0g4s --- addons/web/static/src/js/views.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 0ec286fa357..a12b30f0380 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -859,10 +859,14 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ }], domains: [] }).pipe(function (results) { - action.context = new db.web.CompoundContext( - results.context, action_data.context); + if (!action_data.context) { + action.context = results.context + } else { + action.context = new db.web.CompoundContext( + results.context, action_data.context); + } return self.do_action(action, result_handler); - }); + }, null); } else { return result_handler(); } -- cgit v1.2.3 From 22da3764df3b51bfeeaf11ff68eb5d289fb69544 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 17 Oct 2011 11:52:16 +0200 Subject: [FIX] Fix error when clicking on empty row in editable lists bzr revid: fme@openerp.com-20111017095216-zfzqgmsfrdcjvccj --- addons/web/static/src/js/view_list.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index a97c249bfaf..7499b812361 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -773,10 +773,12 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis }) .delegate('tr', 'click', function (e) { e.stopPropagation(); - self.dataset.index = self.records.indexOf( - self.records.get( - self.row_id(e.currentTarget))); - self.row_clicked(e); + var row_id = self.row_id(e.currentTarget); + if (row_id !== undefined) { + self.dataset.index = self.records.indexOf( + self.records.get(row_id)); + self.row_clicked(e); + } }); }, row_clicked: function () { -- cgit v1.2.3 From 8b1e88a47a5c566ad0ebb2e79f67b16d242a2bd2 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 17 Oct 2011 12:03:10 +0200 Subject: [REM] Removed '& Edit' label in FormView's Save and Create buttons bzr revid: fme@openerp.com-20111017100310-sxhudt74oi7eia10 --- addons/web/static/src/js/view_form.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 65ce114fb4b..569ac4f72ff 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -102,7 +102,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# }); this.$form_header.find('button.oe_form_button_save').click(this.do_save); - this.$form_header.find('button.oe_form_button_save_edit').click(this.do_save_edit); this.$form_header.find('button.oe_form_button_cancel').click(this.do_cancel); this.$form_header.find('button.oe_form_button_new').click(this.on_button_new); this.$form_header.find('button.oe_form_button_duplicate').click(this.on_button_duplicate); @@ -427,10 +426,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.mutating_lock = this.mutating_lock.pipe(action, action); return this.mutating_lock; }, - do_save_edit: function() { - this.do_save(); - //this.switch_readonly(); Use promises - }, switch_readonly: function() { }, switch_editable: function() { @@ -1948,7 +1943,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ controller.on_pager_action.add_first(function() { self.save_form_view(); }); - controller.$element.find(".oe_form_button_save_edit").hide(); + controller.$element.find(".oe_form_button_save").hide(); } else if (view_type == "graph") { self.reload_current_view() } -- cgit v1.2.3 From 81d84899a1fcbd24af92599503475ca68910ecb0 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 17 Oct 2011 13:38:59 +0200 Subject: [imp] css improvements of the statusbar bzr revid: nicolas.vanhoren@openerp.com-20111017113859-zlt1zxy15n2c25o7 --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 569ac4f72ff..c3baf8c44f9 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2745,7 +2745,7 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ render_list: function() { var self = this; var shown = _.map(((this.node.attrs || {}).statusbar_visible || "").split(","), - function(x) { return x.trim(); }); + function(x) { return _.trim(x); }); shown = _.select(shown, function(x) { return x.length > 0; }); if (shown.length == 0) { -- cgit v1.2.3 From 9012103f82c81a0dc885ebe43c516e49a4ba7f65 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 17 Oct 2011 13:56:52 +0200 Subject: [IMP] add translation marks to printed text in listview bzr revid: xmo@openerp.com-20111017115652-9230tli493e9sqkt --- addons/web/static/src/js/view_list.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 713d5ea0b2f..8ea9f053b1d 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -1,4 +1,5 @@ openerp.web.list = function (openerp) { +var _t = openerp.web._t; var QWeb = openerp.web.qweb; openerp.web.views.add('list', 'openerp.web.ListView'); openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# */ { @@ -10,7 +11,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# // whether the column headers should be displayed 'header': true, // display addition button, with that label - 'addable': "New", + 'addable': _t("New"), // whether the list view can be sorted, note that once a view has been // sorted it can not be reordered anymore 'sortable': true, @@ -252,7 +253,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# '' + '' + '' + - '') + '') .change(function () { var val = parseInt($select.val(), 10); self._limit = (isNaN(val) ? null : val); @@ -463,7 +464,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# * @param {Array} ids the ids of the records to delete */ do_delete: function (ids) { - if (!ids.length || !confirm(" Are you sure to remove those records ?")) { + if (!(ids.length && confirm(_t("Are you sure to remove those records ?")))) { return; } var self = this; @@ -1097,7 +1098,7 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L var group_column = _(self.columns).detect(function (column) { return column.id === group.grouped_on; }); $group_column.html(openerp.web.format_cell( - row_data, group_column, "Undefined" + row_data, group_column, _t("Undefined") )); if (group.openable) { // Make openable if not terminal group & group_by_no_leaf -- cgit v1.2.3 From f3b67f4f7129876ef5f90e6879391c7542d3185a Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 17 Oct 2011 14:09:01 +0200 Subject: [imp] added text in white if status bar if arrow color is too dark bzr revid: nicolas.vanhoren@openerp.com-20111017120901-zuxcqat247jfbgc9 --- addons/web/static/src/js/view_form.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c3baf8c44f9..e998b3b2afc 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2764,12 +2764,32 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ if (color) { var elem = this.$element.find("li.oe-arrow-list-selected span"); elem.css("border-color", color); + if (this.check_white(color)) + elem.css("color", "white"); elem = this.$element.find("li.oe-arrow-list-selected .oe-arrow-list-before"); elem.css("border-left-color", "rgba(0,0,0,0)"); elem = this.$element.find("li.oe-arrow-list-selected .oe-arrow-list-after"); elem.css("border-color", "rgba(0,0,0,0)"); elem.css("border-left-color", color); } + }, + check_white: function(color) { + var div = $("
"); + div.css("display", "none"); + div.css("color", color); + div.appendTo($("body")); + var ncolor = div.css("color"); + div.remove(); + var res = /^\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)\s*$/.exec(ncolor); + if (!res) { + return false; + } + var comps = [parseInt(res[1]), parseInt(res[2]), parseInt(res[3])]; + var lum = comps[0] * 0.3 + comps[1] * 0.59 + comps[1] * 0.11; + if (lum < 128) { + return true; + } + return false; } }); -- cgit v1.2.3 From 1d0b38d034f2f898f191acdc84200be00db6be5b Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 17 Oct 2011 14:23:35 +0200 Subject: [FIX] No title on page trigered by an action lp bug: https://launchpad.net/bugs/872148 fixed bzr revid: fme@openerp.com-20111017122335-vov2sy95sdt3dwp9 --- addons/web/static/src/js/views.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index a12b30f0380..32e17db641f 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -431,10 +431,16 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View on_mode_switch: function (view_type) { var self = this; return $.when( - this._super(view_type), - this.shortcut_check(this.views[view_type])).then(function () { - var view_id = self.views[self.active_view].controller.fields_view.view_id; + this._super(view_type), + this.shortcut_check(this.views[view_type]) + ).then(function() { + var controller = self.views[self.active_view].controller, + fvg = controller.fields_view, + view_id = (fvg && fvg.view_id) || '--'; self.$element.find('.oe_get_xml_view span').text(view_id); + if (!self.action.name && fvg) { + self.$element.find('.oe_view_title').text(fvg.arch.attrs.string || fvg.name); + } }); }, shortcut_check : function(view) { -- cgit v1.2.3 From 8e5a6b7c61615baaad6bed64de9fa86f888cf320 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 14 Oct 2011 14:20:20 +0200 Subject: [FIX] correctly propagate the action_data context (in a do_execute_action) to the action itself This is mainly of use for buttons: the context they set should apply not only to fetching and executing the initial action, but to all calls within the popup they open, if any lp bug: https://launchpad.net/bugs/873202 fixed bzr revid: xmo@openerp.com-20111014122020-n3uz31ilemt1lvro --- addons/web/static/src/js/views.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 3cc7d7eb4f8..0ec286fa357 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -859,7 +859,8 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ }], domains: [] }).pipe(function (results) { - action.context = results.context + action.context = new db.web.CompoundContext( + results.context, action_data.context); return self.do_action(action, result_handler); }); } else { -- cgit v1.2.3 From 6e93a38f882d3afd6b472100fc8c3c02f292f28d Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 14 Oct 2011 17:29:46 +0200 Subject: [FIX] web: correctly concat_file when no debug bzr revid: chs@openerp.com-20111014152946-r307ol34kdlq5qrs --- addons/web/static/src/js/core.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index bed5f199157..0418ec765e1 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -384,6 +384,7 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web var self = this; // Construct a JSON-RPC2 request, method is currently unused params.session_id = this.session_id; + if (this.debug) params.debug = 1; // Call using the rpc_mode var deferred = $.Deferred(); @@ -566,15 +567,11 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web var file_list = ["/web/static/lib/datejs/globalization/" + self.user_context.lang.replace("_", "-") + ".js" ]; - if(self.debug) { - self.rpc('/web/webclient/csslist', {"mods": modules}, self.do_load_css); - self.rpc('/web/webclient/jslist', {"mods": modules}, function(files) { - self.do_load_js(file_list.concat(files)); - }); - } else { - self.do_load_css(["/web/webclient/css?mods="+modules]); - self.do_load_js(file_list.concat(["/web/webclient/js?mods="+modules])); - } + + self.rpc('/web/webclient/csslist', {"mods": modules}, self.do_load_css); + self.rpc('/web/webclient/jslist', {"mods": modules}, function(files) { + self.do_load_js(file_list.concat(files)); + }); openerp._modules_loaded = true; }); }); @@ -583,7 +580,7 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web var self = this; _.each(files, function (file) { $('head').append($('', { - 'href': file + (self.debug ? '?debug=' + (new Date().getTime()) : ''), + 'href': file, 'rel': 'stylesheet', 'type': 'text/css' })); @@ -595,7 +592,7 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web var file = files.shift(); var tag = document.createElement('script'); tag.type = 'text/javascript'; - tag.src = file + (this.debug ? '?debug=' + (new Date().getTime()) : ''); + tag.src = file; tag.onload = tag.onreadystatechange = function() { if ( (tag.readyState && tag.readyState != "loaded" && tag.readyState != "complete") || tag.onload_done ) return; -- cgit v1.2.3 From 1e2e8ce9d1d478dcbdd8e32452bd9f1ab6bbe6ae Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Mon, 17 Oct 2011 11:46:02 +0530 Subject: [IMP] Import :- improve code. bzr revid: ysa@tinyerp.com-20111017061602-6sv4m5ew70by57yx --- addons/web/static/src/js/data_import.js | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data_import.js b/addons/web/static/src/js/data_import.js index 6eee2bd8ded..d20a2e30c81 100644 --- a/addons/web/static/src/js/data_import.js +++ b/addons/web/static/src/js/data_import.js @@ -49,18 +49,12 @@ openerp.web.DataImport = openerp.web.Dialog.extend({ }); }; this.ready = $.Deferred.queue().then(function () { - self.required_default_fields = _(self.fields).chain() - .filter(function (field) { return field.required; }) - .pluck('id') + self.required_fields = _(self.fields).chain() + .filter(function (field) { return field.required && !_.include(self.fields_with_defaults, field.id); }) + .pluck('name') .value(); - dataset.default_get(self.required_default_fields || [], function(res) { - self.required_fields = _(self.fields).chain() - .filter(function (field) {if( !(field.id in res)) return field.required; }) - .pluck('name') - .value(); - convert_fields(self); - self.all_fields.sort(); - }); + convert_fields(self); + self.all_fields.sort(); }); }, start: function() { @@ -88,7 +82,12 @@ openerp.web.DataImport = openerp.web.Dialog.extend({ this.ready.push(new openerp.web.DataSet(this, this.model).call( 'fields_get', [], function (fields) { self.graft_fields(fields); - })); + self.ready.push(new openerp.web.DataSet(self, self.model).default_get(_.pluck(self.fields, 'id'), function (fields) { + self.fields_with_defaults = []; + _.each(fields, function(key, val) { if (key) { self.fields_with_defaults.push(val); } }); + }) + ) + })); }, graft_fields: function (fields, parent, level) { parent = parent || this; -- cgit v1.2.3 From 19f265f11b600c1971c87e6b805d7ed12aeaebf4 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Mon, 17 Oct 2011 18:48:49 +0530 Subject: [FIX] import :- change variable name. bzr revid: ysa@tinyerp.com-20111017131849-u034vkz20cw8e31t --- addons/web/static/src/js/data_import.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data_import.js b/addons/web/static/src/js/data_import.js index d20a2e30c81..749bbbe9f1b 100644 --- a/addons/web/static/src/js/data_import.js +++ b/addons/web/static/src/js/data_import.js @@ -84,7 +84,7 @@ openerp.web.DataImport = openerp.web.Dialog.extend({ self.graft_fields(fields); self.ready.push(new openerp.web.DataSet(self, self.model).default_get(_.pluck(self.fields, 'id'), function (fields) { self.fields_with_defaults = []; - _.each(fields, function(key, val) { if (key) { self.fields_with_defaults.push(val); } }); + _.each(fields, function(val, key) { if (val) { self.fields_with_defaults.push(key); } }); }) ) })); -- cgit v1.2.3 From 789b0b65240d5a627eba00b07246804d6a7bd177 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 17 Oct 2011 15:41:03 +0200 Subject: [IMP] stop displaying *big* filters when a filter-in-field has a @string also log a debug warning to the console bzr revid: xmo@openerp.com-20111017134103-cojd352p3ppqs68h --- addons/web/static/src/js/search.js | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 2769a860d2a..c7aa1e3cfe3 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -643,6 +643,12 @@ openerp.web.search.Field = openerp.web.search.Input.extend( /** @lends openerp.w this.attrs = _.extend({}, field, view_section.attrs); this.filters = new openerp.web.search.FilterGroup(_.map( view_section.children, function (filter_node) { + if (filter_node.attrs.string && + typeof console !== 'undefined' && console.debug) { + console.debug("Filter-in-field with a 'string' attribute " + + "in view", view); + } + delete filter_node.attrs.string; return new openerp.web.search.Filter( filter_node, view); }), view); -- cgit v1.2.3 From 548a809ff5853f3c97d6cd6bc3c71fa850d58289 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 17 Oct 2011 16:58:49 +0200 Subject: [FIX] downloading files from an unsaved/in-memory wizard fallback on default_get if record does not exist in db, as for e.g. Thunderbird and Outlook plugins lp bug: https://launchpad.net/bugs/856487 fixed bzr revid: xmo@openerp.com-20111017145849-p8dq0eprkru4xtl1 --- addons/web/static/src/js/view_form.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index e998b3b2afc..06171ed1d73 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2642,14 +2642,10 @@ openerp.web.form.FieldBinary = openerp.web.form.Field.extend({ on_file_uploaded_and_valid: function(size, name, content_type, file_base64) { }, on_save_as: function() { - if (!this.view.datarecord.id) { - this.do_warn("Can't save file", "The record has not yet been saved"); - } else { - var url = '/web/binary/saveas?session_id=' + this.session.session_id + '&model=' + - this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name + - '&fieldname=' + (this.node.attrs.filename || '') + '&t=' + (new Date().getTime()); - window.open(url); - } + var url = '/web/binary/saveas?session_id=' + this.session.session_id + '&model=' + + this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name + + '&fieldname=' + (this.node.attrs.filename || '') + '&t=' + (new Date().getTime()); + window.open(url); }, on_clear: function() { if (this.value !== false) { -- cgit v1.2.3 From edb6f5708854f3a1ec8220fd790a320b87e366ff Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 17 Oct 2011 17:24:00 +0200 Subject: [FIX] Crashmanager only display one error at a time, closing the previous one. (stupid fme) bzr revid: fme@openerp.com-20111017152400-3ntwfzzxugkzrf0w --- addons/web/static/src/js/chrome.js | 55 +++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 25 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 69c9466a9ce..a74c2cd4f8e 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -136,21 +136,11 @@ openerp.web.Dialog = openerp.web.OldWidget.extend(/** @lends openerp.web.Dialog# } }); -openerp.web.CrashManager = openerp.web.Dialog.extend(/** @lends openerp.web.CrashManager# */{ - identifier_prefix: 'dialog_crash', - /** - * @constructs opener.web.CrashManager - * @extends openerp.web.Dialog - * - * @param parent - */ +openerp.web.CrashManager = openerp.web.SessionAware.extend({ init: function(parent) { - this._super(parent); + this._super((parent || {}).session); this.session.on_rpc_error.add(this.on_rpc_error); }, - on_button_Ok: function() { - this.close(); - }, on_rpc_error: function(error) { this.error = error; if (error.data.fault_code) { @@ -161,20 +151,36 @@ openerp.web.CrashManager = openerp.web.Dialog.extend(/** @lends openerp.web.Cras } } if (error.code === 200 && error.type) { - this.dialog_title = "OpenERP " + _.capitalize(error.type); - this.template = 'DialogWarning'; - this.open({ - width: 'auto', - height: 'auto' - }); + this.on_managed_error(error); } else { - this.dialog_title = "OpenERP Error"; - this.template = 'DialogTraceback'; - this.open({ - width: 'auto', - height: 'auto' - }); + this.on_traceback(error); } + }, + on_managed_error: function(error) { + $('
' + QWeb.render('DialogWarning', {error: error}) + '
').dialog({ + title: "OpenERP " + _.capitalize(error.type), + buttons: { + Ok: function() { + $(this).dialog("close"); + } + } + }); + }, + on_traceback: function(error) { + var dialog = new openerp.web.Dialog(this, { + title: "OpenERP " + _.capitalize(error.type), + autoOpen: true, + width: '90%', + height: '90%', + min_width: '800px', + min_height: '600px', + buttons: { + Ok: function() { + $(this).dialog("close"); + } + } + }).start(); + dialog.$element.html(QWeb.render('DialogTraceback', {error: error})); } }); @@ -946,7 +952,6 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie this.session = new openerp.web.Session(); this.loading = new openerp.web.Loading(this,"oe_loading"); this.crashmanager = new openerp.web.CrashManager(this); - this.crashmanager.start(); this.header = new openerp.web.Header(this); this.login = new openerp.web.Login(this); -- cgit v1.2.3 From a789d421cbe013a27931ee6482f081d7b22165d8 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 17 Oct 2011 17:29:23 +0200 Subject: [FIX] Binary fields does not honnor readonly property bzr revid: fme@openerp.com-20111017152923-rfyc16l3cr0cwmm3 --- addons/web/static/src/js/view_form.js | 1 + 1 file changed, 1 insertion(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 06171ed1d73..a5fa2451641 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2662,6 +2662,7 @@ openerp.web.form.FieldBinaryFile = openerp.web.form.FieldBinary.extend({ update_dom: function() { this._super.apply(this, arguments); this.$element.find('.oe-binary-file-set, .oe-binary-file-clear').toggle(!this.readonly); + this.$element.find('input[type=text]').attr('disabled', this.readonly); }, set_value: function(value) { this._super.apply(this, arguments); -- cgit v1.2.3 From 1eee4a0833954b1d0b59cc9dfb03a3123eafb109 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 17 Oct 2011 17:33:26 +0200 Subject: [FIX] Button widget does not honnor readonly property bzr revid: fme@openerp.com-20111017153326-77z2xmtqcnfpadom --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a5fa2451641..b65194d1c0f 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1014,7 +1014,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.readonly || this.force_disabled || !this.view.is_interactible_record()) { this.$element.find("button").attr("disabled", "disabled"); this.$element.find("button").css("color", "grey"); } else { -- cgit v1.2.3 From fc01a139bee409fcef1dc8fb57b01417a5cdb0f0 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 17 Oct 2011 18:22:28 +0200 Subject: [fix] attempt to fix a race condition where a o2m will try to make a get_value on each field in the form before they are setted lp bug: https://launchpad.net/bugs/865048 fixed bzr revid: nicolas.vanhoren@openerp.com-20111017162228-0xazc4zhd9dwj28k --- addons/web/static/src/js/view_form.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index b65194d1c0f..83e15bda759 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1888,6 +1888,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ init: function(view, node) { this._super(view, node); this.is_started = $.Deferred(); + this.is_setted = $.Deferred(); this.form_last_update = $.Deferred(); this.init_form_last_update = this.form_last_update; this.disable_utility_classes = true; @@ -1952,9 +1953,11 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ this.viewmanager.on_mode_switch.add_first(function() { self.save_form_view(); }); - setTimeout(function () { - self.viewmanager.appendTo(self.$element); - }, 0); + this.is_setted.then(function() { + setTimeout(function () { + self.viewmanager.appendTo(self.$element); + }, 0); + }); }, reload_current_view: function() { var self = this; @@ -2031,6 +2034,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ $.when(this.is_started).then(function() { self.reload_current_view(); }); + this.is_setted.resolve(); }, get_value: function() { var self = this; -- cgit v1.2.3 From 8b8d7a1d762a38012de9e0949d6f6028ad2b4b5e Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Tue, 18 Oct 2011 11:24:00 +0530 Subject: [FIX] Display name of reference field in tree. lp bug: https://launchpad.net/bugs/861434 fixed bzr revid: vda@tinyerp.com-20111018055400-2j1gvgvognuo6ka9 --- addons/web/static/src/js/view_list.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 5c4db4f31aa..5a923d58922 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -793,6 +793,22 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis this.dataset]); }, render_cell: function (record, column) { + if(column.type === 'reference') { + var value = record.get(column.id); + if (_.isString(value)) { + var ref = value.split(','); + if (_.size(ref) > 1) { + var model = ref[0], + id = parseInt(ref[1]); + new openerp.web.DataSet(this.view, model).name_get([id], function(names) { + if (!names.length) { + return; + } + record.set(column.id, names[0][1]); + }); + } + } + } if (column.type === 'many2one') { var value = record.get(column.id); // m2o values are usually name_get formatted, [Number, String] -- cgit v1.2.3 From c7f4482d5b557947d201952d91cca453f2263904 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Tue, 18 Oct 2011 15:04:32 +0530 Subject: [FIX] Check value type,base with parseint. bzr revid: vda@tinyerp.com-20111018093432-0ixihleg3vynpvwx --- addons/web/static/src/js/view_list.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 5a923d58922..01f611e6a77 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -795,11 +795,11 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis render_cell: function (record, column) { if(column.type === 'reference') { var value = record.get(column.id); - if (_.isString(value)) { + if (typeof value === 'string' || value instanceof String) { var ref = value.split(','); - if (_.size(ref) > 1) { + if (ref.length > 1) { var model = ref[0], - id = parseInt(ref[1]); + id = parseInt(ref[1], 10); new openerp.web.DataSet(this.view, model).name_get([id], function(names) { if (!names.length) { return; -- cgit v1.2.3 From 7b600e82c4ff9097cb0433dc943a0f896e7e1052 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 18 Oct 2011 12:34:43 +0200 Subject: [IMP] don't check for the column type being m2o if we already went through the reference case bzr revid: xmo@openerp.com-20111018103443-p1l5cya0nexf6cj1 --- addons/web/static/src/js/view_list.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 2f9bfd428ca..1c7f1a1562b 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -808,8 +808,7 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis record.set(column.id, names[0][1]); }); } - } - if (column.type === 'many2one') { + } else if (column.type === 'many2one') { value = record.get(column.id); // m2o values are usually name_get formatted, [Number, String] // pairs, but in some cases only the id is provided. In these -- cgit v1.2.3 From 8c9d65c41aa3000142c56c112efbe6404a4610d8 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 18 Oct 2011 12:52:55 +0200 Subject: [IMP] fix mistake done while merging ref-in-listviews, improve discrimination between ref-value and printable value * Removed a test on splitting on ',' yielding more than one value, which means we're going to loop on the name_get since they're all strings * Improved value-detection: we should only name_get the reference field if the value is an actual reference value, meaning a model name, a ',' and an id. Used regex instead of naive split, so we don't match referenced names with a comma (e.g. 'Hubert de Vaucanson, Vicomte de Blois') bzr revid: xmo@openerp.com-20111018105255-6vz6l9lg1iiurfc9 --- addons/web/static/src/js/view_list.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 1c7f1a1562b..629dc12c780 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -796,13 +796,18 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis var value; if(column.type === 'reference') { value = record.get(column.id); - if (value) { + var ref_match; + // Ensure that value is in a reference "shape", otherwise we're + // going to loop on performing name_get after we've resolved (and + // set) a human-readable version. m2o does not have this issue + // because the non-human-readable is just a number, where the + // human-readable version is a pair + if (value && (ref_match = /([\w\.]+),(\d+)/.exec(value))) { // reference values are in the shape "$model,$id" (as a // string), we need to split and name_get this pair in order // to get a correctly displayable value in the field - var ref = value.split(','), - model = ref[0], - id = parseInt(ref[1], 10); + var model = ref_match[1], + id = parseInt(ref_match[2], 10); new openerp.web.DataSet(this.view, model).name_get([id], function(names) { if (!names.length) { return; } record.set(column.id, names[0][1]); -- cgit v1.2.3 From 2069b260b01703514c792774acaab884855a3873 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 18 Oct 2011 13:07:40 +0200 Subject: [FIX] FormFrame layout now supports 'always invisible' widgets bzr revid: fme@openerp.com-20111018110740-1ik1nykpsipt7uqo --- addons/web/static/src/js/view_form.js | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 83e15bda759..a5a56c2d46e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -694,6 +694,7 @@ openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form. this.view = view; this.node = node; this.modifiers = JSON.parse(this.node.attrs.modifiers || '{}'); + this.always_invisible = (this.modifiers.invisible && this.modifiers.invisible === true); this.type = this.type || node.tag; this.element_name = this.element_name || this.type; this.element_class = [ @@ -809,18 +810,26 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({ }, set_row_cells_with: function(row) { var bypass = 0, - max_width = 100; + max_width = 100, + row_length = row.length; for (var i = 0; i < row.length; i++) { - bypass += row[i].width === undefined ? 0 : 1; - max_width -= row[i].decrease_max_width; + if (row[i].always_invisible) { + row_length--; + } else { + bypass += row[i].width === undefined ? 0 : 1; + max_width -= row[i].decrease_max_width; + } } var size_unit = Math.round(max_width / (this.columns - bypass)), colspan_sum = 0; for (var i = 0; i < row.length; i++) { var w = row[i]; + if (w.always_invisible) { + continue; + } colspan_sum += w.colspan; if (w.width === undefined) { - var width = (i === row.length - 1 && colspan_sum === this.columns) ? max_width : Math.round(size_unit * w.colspan); + var width = (i === row_length - 1 && colspan_sum === this.columns) ? max_width : Math.round(size_unit * w.colspan); max_width -= width; w.width = width + '%'; } @@ -850,13 +859,15 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({ this.add_widget(widget); }, add_widget: function(widget, colspan) { - colspan = colspan || widget.colspan; var current_row = this.table[this.table.length - 1]; - if (current_row.length && (this.x + colspan) > this.columns) { - current_row = this.add_row(); + if (!widget.always_invisible) { + colspan = colspan || widget.colspan; + if (current_row.length && (this.x + colspan) > this.columns) { + current_row = this.add_row(); + } + this.x += widget.colspan; } current_row.push(widget); - this.x += widget.colspan; return widget; } }); -- cgit v1.2.3 From 679983672d9afe72e6a19494598b8eb558dcd8cc Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 18 Oct 2011 13:50:40 +0200 Subject: [FIX] Action buttons does not include active_id in context when loading action lp bug: https://launchpad.net/bugs/871771 fixed bzr revid: fme@openerp.com-20111018115040-66l0xiudl8yt8khq --- addons/web/static/src/js/views.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 32e17db641f..4094d1019bb 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -854,15 +854,19 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ return self.widget_parent.on_action_executed.apply(null, arguments); } }; + var context = new db.web.CompoundContext(dataset.get_context()); + if (record_id) { + context.add({ + active_id: record_id, + active_ids: [record_id], + active_model: dataset.model + }); + } var handler = function (r) { var action = r.result; if (action && action.constructor == Object) { return self.rpc('/web/session/eval_domain_and_context', { - contexts: [dataset.get_context(), action.context || {}, { - active_id: record_id || false, - active_ids: [record_id || false], - active_model: dataset.model - }], + contexts: [context, action.context || {}], domains: [] }).pipe(function (results) { if (!action_data.context) { @@ -878,8 +882,6 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ } }; - var context = new db.web.CompoundContext(dataset.get_context(), action_data.context || {}); - if (action_data.special) { return handler({result: {"type":"ir.actions.act_window_close"}}); } else if (action_data.type=="object") { -- cgit v1.2.3 From b06923f0f528f468ecfbc9dd1b3a3cb39f74b308 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 18 Oct 2011 14:26:07 +0200 Subject: [FIX] document.head not supported in Firefox 3.6 bzr revid: fme@openerp.com-20111018122607-4z6duz862hb8y3pn --- addons/web/static/src/js/core.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 50a12d20f56..8dfbd68e6de 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -600,7 +600,8 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web tag.onload_done = true; self.do_load_js(files); }; - document.head.appendChild(tag); + var head = document.head || document.getElementsByTagName('head')[0]; + head.appendChild(tag); } else { this.on_modules_loaded(); } -- cgit v1.2.3 From 29f2f28afe17b2722630fd539278427f284b26fd Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 18 Oct 2011 17:15:34 +0200 Subject: [REV] Revert Rev.1290: Breaks more than it fixes bzr revid: fme@openerp.com-20111018151534-3w5ms47i8yj48gpq --- addons/web/static/src/js/views.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 4094d1019bb..32e17db641f 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -854,19 +854,15 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ return self.widget_parent.on_action_executed.apply(null, arguments); } }; - var context = new db.web.CompoundContext(dataset.get_context()); - if (record_id) { - context.add({ - active_id: record_id, - active_ids: [record_id], - active_model: dataset.model - }); - } var handler = function (r) { var action = r.result; if (action && action.constructor == Object) { return self.rpc('/web/session/eval_domain_and_context', { - contexts: [context, action.context || {}], + contexts: [dataset.get_context(), action.context || {}, { + active_id: record_id || false, + active_ids: [record_id || false], + active_model: dataset.model + }], domains: [] }).pipe(function (results) { if (!action_data.context) { @@ -882,6 +878,8 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ } }; + var context = new db.web.CompoundContext(dataset.get_context(), action_data.context || {}); + if (action_data.special) { return handler({result: {"type":"ir.actions.act_window_close"}}); } else if (action_data.type=="object") { -- cgit v1.2.3 From 6ce8a18fbe9c5273b79f3f5f5e079417f9acf404 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 18 Oct 2011 17:57:33 +0200 Subject: [fix] context problem in accounting lp bug: https://launchpad.net/bugs/871771 fixed bzr revid: nicolas.vanhoren@openerp.com-20111018155733-45xhk7hg2xsmj26h --- addons/web/static/src/js/views.js | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 32e17db641f..9aecbd475af 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -854,23 +854,27 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ return self.widget_parent.on_action_executed.apply(null, arguments); } }; + var context = new db.web.CompoundContext(dataset.get_context(), action_data.context || {}); + var handler = function (r) { var action = r.result; if (action && action.constructor == Object) { - return self.rpc('/web/session/eval_domain_and_context', { - contexts: [dataset.get_context(), action.context || {}, { - active_id: record_id || false, - active_ids: [record_id || false], + var ncontext = new db.web.CompoundContext(context, action.context || {}); + if (record_id) { + ncontext.add({ + active_id: record_id, + active_ids: [record_id], active_model: dataset.model - }], + }); + } + return self.rpc('/web/session/eval_domain_and_context', { + contexts: [ncontext], domains: [] }).pipe(function (results) { - if (!action_data.context) { - action.context = results.context - } else { - action.context = new db.web.CompoundContext( - results.context, action_data.context); - } + action.context = results.context; + /* niv: previously we were overriding once more with action_data.context, + * I assumed this was not a correct behavior and removed it + */ return self.do_action(action, result_handler); }, null); } else { @@ -878,14 +882,12 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ } }; - var context = new db.web.CompoundContext(dataset.get_context(), action_data.context || {}); - if (action_data.special) { return handler({result: {"type":"ir.actions.act_window_close"}}); } else if (action_data.type=="object") { return dataset.call_button(action_data.name, [[record_id], context], handler); } else if (action_data.type=="action") { - return this.rpc('/web/action/load', { action_id: parseInt(action_data.name, 10), context: context }, handler); + return this.rpc('/web/action/load', { action_id: parseInt(action_data.name, 10), context: context, do_not_eval: true}, handler); } else { return dataset.exec_workflow(record_id, action_data.name, handler); } -- cgit v1.2.3 From 9d9476b981dd200f8c0c65a728b6b86ac840e364 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 19 Oct 2011 11:56:12 +0200 Subject: [fix] potential problem in contexts an button actions bzr revid: nicolas.vanhoren@openerp.com-20111019095612-y7lw6o2lbfngdga5 --- addons/web/static/src/js/views.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 9aecbd475af..a2be0dfcaeb 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -859,7 +859,7 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ var handler = function (r) { var action = r.result; if (action && action.constructor == Object) { - var ncontext = new db.web.CompoundContext(context, action.context || {}); + var ncontext = new db.web.CompoundContext(context); if (record_id) { ncontext.add({ active_id: record_id, @@ -867,6 +867,7 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ active_model: dataset.model }); } + ncontext.add(action.context || {}); return self.rpc('/web/session/eval_domain_and_context', { contexts: [ncontext], domains: [] -- cgit v1.2.3 From efd0674429d309cf6a2d18fe783c0421b4741166 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 19 Oct 2011 12:38:22 +0200 Subject: [FIX] always add external ids to the list of importable fields lp bug: https://launchpad.net/bugs/878005 fixed bzr revid: xmo@openerp.com-20111019103822-lx0gldsmxbqb87dr --- addons/web/static/src/js/data_import.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data_import.js b/addons/web/static/src/js/data_import.js index 0864c5e594e..0d7d6eca032 100644 --- a/addons/web/static/src/js/data_import.js +++ b/addons/web/static/src/js/data_import.js @@ -1,5 +1,6 @@ openerp.web.data_import = function(openerp) { -var QWeb = openerp.web.qweb; +var QWeb = openerp.web.qweb, + _t = openerp.web._t; /** * Safari does not deal well at all with raw JSON data being returned. As a * result, we're going to cheat by using a pseudo-jsonp: instead of getting @@ -101,7 +102,16 @@ openerp.web.DataImport = openerp.web.Dialog.extend({ level = level || 0; var self = this; + if (level === 0) { + parent.fields.push({ + id: 'id', + name: 'id', + string: _t('External ID'), + required: false + }); + } _(fields).each(function (field, field_name) { + if (field_name === 'id') { return; } var f = { id: field_name, name: field_name, -- cgit v1.2.3 From fecb2ee680df6076ac72e6215e2670393cfc9f24 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Wed, 19 Oct 2011 18:20:34 +0530 Subject: [FIX] call super method in m2oreadonly widget. lp bug: https://launchpad.net/bugs/878033 fixed bzr revid: ysa@tinyerp.com-20111019125034-2n7d9yrp53la4zdc --- addons/web/static/src/js/view_form.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a5a56c2d46e..4e4a950bd99 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -15,7 +15,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# /** * @constructs openerp.web.FormView * @extends openerp.web.View - * + * * @param {openerp.web.Session} session the current openerp session * @param {openerp.web.DataSet} dataset the dataset this view will work with * @param {String} view_id the identifier of the OpenERP view object @@ -1007,7 +1007,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ }, on_confirmed: function() { var self = this; - + var context = this.node.attrs.context; if (context && context.__ref) { context = new openerp.web.CompoundContext(context); @@ -2745,13 +2745,13 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ start: function() { this._super(); this.selected_value = null; - + this.render_list(); }, set_value: function(value) { this._super(value); this.selected_value = value; - + this.render_list(); }, render_list: function() { @@ -2759,7 +2759,7 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ var shown = _.map(((this.node.attrs || {}).statusbar_visible || "").split(","), function(x) { return _.trim(x); }); shown = _.select(shown, function(x) { return x.length > 0; }); - + if (shown.length == 0) { this.to_show = this.field.selection; } else { @@ -2767,10 +2767,10 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ return _.indexOf(shown, x[0]) !== -1 || x[0] === self.selected_value; }); } - + var content = openerp.web.qweb.render("FieldStatus.content", {widget: this, _:_}); this.$element.html(content); - + var colors = JSON.parse((this.node.attrs || {}).statusbar_colors || "{}"); var color = colors[this.selected_value]; if (color) { @@ -2872,6 +2872,7 @@ openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend( openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldCharReadonly.extend({ set_value: function (value) { value = value || null; + this._super(value); this.invalid = false; var self = this; this.tmp_value = value; -- cgit v1.2.3 From 75c4b66589f48b4a1b72a99c321d272aa80f2158 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 19 Oct 2011 14:56:04 +0200 Subject: [ADD] act_url support bzr revid: xmo@openerp.com-20111019125604-e290rwdpme44wqc8 --- addons/web/static/src/js/views.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index a2be0dfcaeb..f402a51bf7e 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -158,6 +158,9 @@ db.web.ActionManager = db.web.Widget.extend({ complete: $.unblockUI }); }); + }, + ir_actions_act_url: function (action) { + window.open(action.url, action.target === 'self' ? '_self' : '_blank'); } }); -- cgit v1.2.3 From c3661c0827601a01b1b79284a0e9167e54f85bec Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 19 Oct 2011 15:49:36 +0200 Subject: [FIX] failure to auto-match 'inner' fields of o2m records when importing lp bug: https://launchpad.net/bugs/878005 fixed bzr revid: xmo@openerp.com-20111019134936-xfo9zt1ivgocbffr --- addons/web/static/src/js/data_import.js | 45 ++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 6 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data_import.js b/addons/web/static/src/js/data_import.js index 0d7d6eca032..711e790dfaa 100644 --- a/addons/web/static/src/js/data_import.js +++ b/addons/web/static/src/js/data_import.js @@ -220,17 +220,50 @@ openerp.web.DataImport = openerp.web.Dialog.extend({ }); // Column auto-detection _(headers).each(function (header, index) { - var f =_(self.fields).detect(function (field) { - // TODO: levenshtein between header and field.string - return field.name === header || field.string.toLowerCase() === header; - }); - if (f) { - $fields.eq(index).val(f.name); + var field_name = self.match_column_to_field(header); + if (field_name) { + $fields.eq(index).val(field_name); } }); self.on_check_field_values(); }); }, + /** + * Returns the name of the field (nested) matching the provided column name + * + * @param {String} name column name to look for + * @param {Array} [fields] fields to look into for the provided name + * @returns {String|undefined} + */ + match_column_to_field: function (name, fields) { + fields = fields || this.fields; + var f; + f = _(fields).detect(function (field) { + // TODO: levenshtein between header and field.string + return field.name === name + || field.string.toLowerCase() === name.toLowerCase(); + }); + if (f) { return f.name; } + + // if ``name`` is a path (o2m), we need to recurse through its .fields + var index = name.indexOf('/'); + if (index === -1) { return undefined; } + // Get the first path section, try to find the matching field + var column_name = name.substring(0, index); + f = _(fields).detect(function (field) { + // field.name for o2m is $foo/id, so we want to match on id + return field.id === column_name + || field.string.toLowerCase() === column_name.toLowerCase() + }); + if (!f) { return undefined; } + + // if we found a matching field for the first path section, recurse in + // its own .fields to try and get the rest of the path matched + var rest = this.match_column_to_field( + name.substring(index+1), f.fields); + if (!rest) { return undefined; } + return f.id + '/' + rest; + }, /** * Looks through all the field selections, and tries to find if two * (or more) columns were matched to the same model field. -- cgit v1.2.3 From f88c553d45b5d7a58a3e675880e549ee8d019160 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 19 Oct 2011 16:07:09 +0200 Subject: [FIX] completely broken readonly URL form field bzr revid: xmo@openerp.com-20111019140709-hj86g28izgnb9imy --- addons/web/static/src/js/view_form.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a5a56c2d46e..d66002ef2dc 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2835,10 +2835,10 @@ openerp.web.form.FieldEmailReadonly = openerp.web.form.FieldURIReadonly.extend({ }); openerp.web.form.FieldUrlReadonly = openerp.web.form.FieldURIReadonly.extend({ set_value: function (value) { - var s = /(\w+):(\.+)/.match(value); - if (!(s[0] === 'http' || s[0] === 'https')) { return; } - this.scheme = s[0]; - this._super(s[1]); + var s = /(\w+):(.+)/.exec(value); + if (!s || !(s[1] === 'http' || s[1] === 'https')) { return; } + this.scheme = s[1]; + this._super(s[2]); } }); openerp.web.form.FieldBooleanReadonly = openerp.web.form.FieldCharReadonly.extend({ -- cgit v1.2.3 From 062449472f5c5f8746d36e1c231e67c748d42f73 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 19 Oct 2011 16:45:07 +0200 Subject: [FIX] In paginated list view, clicking on a row on page 2+ goes to wrong record in form view bzr revid: fme@openerp.com-20111019144507-j5oec235bw79gw73 --- addons/web/static/src/js/view_list.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 629dc12c780..690a3cc4379 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -780,8 +780,7 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis e.stopPropagation(); var row_id = self.row_id(e.currentTarget); if (row_id !== undefined) { - self.dataset.index = self.records.indexOf( - self.records.get(row_id)); + self.dataset.index = self.dataset.ids.indexOf(row_id); self.row_clicked(e); } }); @@ -789,7 +788,7 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis row_clicked: function () { $(this).trigger( 'row_link', - [this.records.at(this.dataset.index).get('id'), + [this.dataset.ids[this.dataset.index], this.dataset]); }, render_cell: function (record, column) { -- cgit v1.2.3 From a958ff049fd2e237a7c369a969d478b35696652c Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 19 Oct 2011 18:06:12 +0200 Subject: [REM] Removed a console.log bzr revid: fme@openerp.com-20111019160612-w0ih265m5no00khg --- addons/web/static/src/js/view_list.js | 1 - 1 file changed, 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 27ce2c7b4d2..690a3cc4379 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -780,7 +780,6 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis e.stopPropagation(); var row_id = self.row_id(e.currentTarget); if (row_id !== undefined) { - console.log(self.dataset); self.dataset.index = self.dataset.ids.indexOf(row_id); self.row_clicked(e); } -- cgit v1.2.3 From 2ed32d7cf67ee8945153ece9637e583009f254b8 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 19 Oct 2011 18:07:09 +0200 Subject: [FIX] Datetime wodget does not correctly parse date when passing value to jQuery ui date picker lp bug: https://launchpad.net/bugs/878206 fixed bzr revid: fme@openerp.com-20111019160709-dwdpcz8hpy34k6d4 --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index d66002ef2dc..0c95cc6bba8 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1257,7 +1257,7 @@ openerp.web.DateTimeWidget = openerp.web.Widget.extend({ }); this.$element.find('img.oe_datepicker_trigger').click(function() { if (!self.readonly) { - self.picker('setDate', self.value || new Date()); + self.picker('setDate', self.value ? openerp.web.auto_str_to_date(self.value) : new Date()); self.$element.find('.oe_datepicker').toggle(); } }); -- cgit v1.2.3 From 70d9e3b7eddff2e3596d099926153a3848ba5379 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Thu, 20 Oct 2011 10:50:16 +0530 Subject: [FIX] Set value in this.value instead of this.tmp_value in many2onereadonly widget. bzr revid: ysa@tinyerp.com-20111020052016-8exqlj462rahvyfe --- addons/web/static/src/js/view_form.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 321070f3080..8380a2c6a4a 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2872,10 +2872,9 @@ openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend( openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldCharReadonly.extend({ set_value: function (value) { value = value || null; - this._super(value); this.invalid = false; var self = this; - this.tmp_value = value; + this.value = value; self.update_dom(); self.on_value_changed(); var real_set_value = function(rval) { -- cgit v1.2.3 From 278955b20741283746914d9633075a831db890f1 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 20 Oct 2011 11:16:19 +0200 Subject: [ADD] Web client now support template translations bzr revid: fme@openerp.com-20111020091619-1i2nhopdgszsy48q --- addons/web/static/src/js/core.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 8dfbd68e6de..21a4ca21931 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -10,8 +10,6 @@ if (!console.debug) { } openerp.web.core = function(openerp) { -openerp.web.qweb = new QWeb2.Engine(); -openerp.web.qweb.debug = (window.location.search.indexOf('?debug') !== -1); /** * John Resig Class with factory improvement */ @@ -1040,6 +1038,21 @@ openerp.web.TranslationDataBase = openerp.web.Class.extend(/** @lends openerp.we }); openerp.web._t = new openerp.web.TranslationDataBase().build_translation_function(); +openerp.web.qweb = new QWeb2.Engine(); +openerp.web.qweb.debug = (window.location.search.indexOf('?debug') !== -1); +openerp.web.qweb.format_text_node = function(s) { + // Note that 'this' is the Qweb Node of the text + var translation = this.node.parentElement.attributes['t-translation']; + if (translation && translation.value === 'off') { + return s; + } + var ts = _.trim(s); + if (ts.length === 0) { + return s; + } + var tr = openerp.web._t(ts); + return tr === ts ? s : tr; +} }; -- cgit v1.2.3 From c507d1ef7ea17d9a6d0a59466a4c57fe81db23cb Mon Sep 17 00:00:00 2001 From: "RavishchanraMurari (Open ERP)" Date: Thu, 20 Oct 2011 17:21:46 +0530 Subject: company_id_in_multi_company bzr revid: rmu@tinyerp.com-20111020115146-p0ai3x3q0u48390k --- addons/web/static/src/js/search.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 9cab0ade9d0..2a4d3b1cdfe 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -63,6 +63,8 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search rows.push(row); var filters = []; _.each(items, function (item) { + if(!item.attrs.hasOwnProperty('invisible') && item.attrs.invisible!=1) + { if (filters.length && item.tag !== 'filter') { row.push( new openerp.web.search.FilterGroup( @@ -98,6 +100,7 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search this.make_field( item, fields[item['attrs'].name])); } + } } }, this); if (filters.length) { -- cgit v1.2.3 From e1e7cadedecb59fb3855ce3b1ee9c85526e3b51e Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 20 Oct 2011 17:05:40 +0200 Subject: [FIX] cookies handling in openerp Session, js-side bzr revid: xmo@openerp.com-20111020150540-ms0sdzd5qi6pz38o --- addons/web/static/src/js/core.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 21a4ca21931..4ed33341ea6 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -361,6 +361,9 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web this.context = {}; this.shortcuts = []; this.active_id = null; + // TODO: session should have an optional name indicating that they'll + // be saved to (and revived from) cookies + this.name = 'session'; }, start: function() { this.session_restore(); @@ -525,7 +528,8 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web * @param name the cookie's name */ get_cookie: function (name) { - var nameEQ = this.element_id + '|' + name + '='; + if (!this.name) { return null; } + var nameEQ = this.name + '|' + name + '='; var cookies = document.cookie.split(';'); for(var i=0; i Date: Thu, 20 Oct 2011 18:20:22 +0200 Subject: [ADD] Added DataSet#select_id() bzr revid: fme@openerp.com-20111020162022-l9wifgvi6qvjb5a2 --- addons/web/static/src/js/data.js | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index ea0824fb1df..475dbe5421c 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -263,6 +263,15 @@ openerp.web.DataSet = openerp.web.Widget.extend( /** @lends openerp.web.DataSet } return this; }, + select_id: function(id) { + var idx = _.indexOf(this.ids, id); + if (idx === -1) { + return false; + } else { + this.index = idx; + return true; + } + }, /** * Read records. * -- cgit v1.2.3 From 69d36a02ca701aabdd71c05b8d6578de0afef3ef Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 20 Oct 2011 18:22:55 +0200 Subject: [FIX] Fix bug for Internet Explorer 3.0 In fact IE<9 bzr revid: fme@openerp.com-20111020162255-5duca37zd18by343 --- addons/web/static/src/js/view_list.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 690a3cc4379..d09ec1d3035 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -780,7 +780,9 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis e.stopPropagation(); var row_id = self.row_id(e.currentTarget); if (row_id !== undefined) { - self.dataset.index = self.dataset.ids.indexOf(row_id); + if (!self.dataset.select_id(row_id)) { + throw "Could not find id in dataset" + } self.row_clicked(e); } }); -- cgit v1.2.3 From faafa77c46916069b624a1272499c546f64fbf22 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 20 Oct 2011 18:30:08 +0200 Subject: [REM] Removed FormDialog#load_id(). Use FormDialog#select_id() instead bzr revid: fme@openerp.com-20111020163008-8qy874po2lgedxay --- addons/web/static/src/js/view_form.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 8380a2c6a4a..f8168d21466 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -551,11 +551,13 @@ openerp.web.FormDialog = openerp.web.Dialog.extend({ this.form.on_saved.add_last(this.on_form_dialog_saved); return this; }, - load_id: function(id) { - var self = this; - return this.dataset.read_ids([id], _.keys(this.form.fields_view.fields), function(records) { - self.form.on_record_loaded(records[0]); - }); + select_id: function(id) { + if (this.form.dataset.select_id(id)) { + return this.form.do_show(); + } else { + this.do_warn("Could not find id in dataset"); + return $.Deferred().reject(); + } }, on_form_dialog_saved: function(r) { this.close(); -- cgit v1.2.3 From 0259bb76299927f7a15566ac79a389effeeb3e20 Mon Sep 17 00:00:00 2001 From: vishmita Date: Fri, 21 Oct 2011 17:36:45 +0530 Subject: [FIX] FF issues in dataset limit. lp bug: https://launchpad.net/bugs/876603 fixed bzr revid: vja@vja-desktop-20111021120645-qx0en9plxihle0dj --- addons/web/static/src/js/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index 475dbe5421c..069506586ad 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -493,7 +493,7 @@ openerp.web.DataSetStatic = openerp.web.DataSet.extend({ offset = options.offset || 0, limit = options.limit || false, fields = fields || false; - var end_pos = limit && limit !== -1 ? offset + limit : undefined; + var end_pos = limit && limit !== -1 ? offset + limit : this.ids.length; return this.read_ids(this.ids.slice(offset, end_pos), fields, callback); }, set_ids: function (ids) { -- cgit v1.2.3 From 01897c8aa6b946492eeaba1595e7e925837527b7 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 21 Oct 2011 14:07:41 +0200 Subject: [FIX] completely broken float formatting when leading 0 Formatting converted the decimal part into an integer, dropping all leading 0s and failing to reinsert them. The conversion also lead to compounded errors, casting 0.1100 into 0.10999 (something like that). Replace this by a straight float formatting via _.sprintf and the slicing of the decimal part from the resulting string (Math.abs and %1 clamp the value to format to the [0, 1[ range, ensuring we just need to slice off the first two characters). Also add some tests. lp bug: https://launchpad.net/bugs/879355 fixed bzr revid: xmo@openerp.com-20111021120741-813im5bzup7vho1f --- addons/web/static/src/js/formats.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/formats.js b/addons/web/static/src/js/formats.js index 94b2c7085db..3ab972f7a86 100644 --- a/addons/web/static/src/js/formats.js +++ b/addons/web/static/src/js/formats.js @@ -28,10 +28,13 @@ openerp.web.format_value = function (value, descriptor, value_if_empty) { case 'float': var precision = descriptor.digits ? descriptor.digits[1] : 2; var int_part = Math.floor(value); - var dec_part = Math.abs(Math.floor((value % 1) * Math.pow(10, precision))); - return _.sprintf('%d%s%d', - int_part, - openerp.web._t.database.parameters.decimal_point, dec_part); + var dec_part = _.sprintf( + '%.' + precision + 'f', + Math.abs(value) % 1).substring(2); + return _.sprintf('%d%s%s', + int_part, + openerp.web._t.database.parameters.decimal_point, + dec_part); case 'float_time': return _.sprintf("%02d:%02d", Math.floor(value), -- cgit v1.2.3 From 0e9d7318fc2c47a1b3fe495bf12f90c968e36ea9 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 21 Oct 2011 14:22:56 +0200 Subject: [FIX] float formatting in form view should take digits/@digits in account lp bug: https://launchpad.net/bugs/879346 fixed bzr revid: xmo@openerp.com-20111021122256-ld3gm8u3yt4kdn71 --- addons/web/static/src/js/view_form.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index f8168d21466..8736f2d69e3 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1233,6 +1233,19 @@ openerp.web.form.FieldUrl = openerp.web.form.FieldChar.extend({ }); openerp.web.form.FieldFloat = openerp.web.form.FieldChar.extend({ + init: function (view, node) { + this._super(view, node); + if (node.attrs.digits) { + this.parse_digits(node.attrs.digits); + } else { + this.digits = view.fields_view.fields[node.attrs.name].digits; + } + }, + parse_digits: function (digits_attr) { + // could use a Python parser instead. + var match = /^\s*[\(\[](\d+),\s*(\d+)/.exec(digits_attr); + return [parseInt(match[1], 10), parseInt(match[2], 10)]; + }, set_value: function(value) { if (value === false || value === undefined) { // As in GTK client, floats default to 0 -- cgit v1.2.3 From 62c52bf0c21f07a75734bb18872e3047f7191f67 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 24 Oct 2011 11:21:40 +0200 Subject: [FIX] Do not use node.parentElement (sorry all) lp bug: https://launchpad.net/bugs/879797 fixed bzr revid: fme@openerp.com-20111024092140-zvrtzmy9cppjyaj2 --- addons/web/static/src/js/core.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 4ed33341ea6..39a1ba7ef64 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -1048,7 +1048,7 @@ openerp.web.qweb = new QWeb2.Engine(); openerp.web.qweb.debug = (window.location.search.indexOf('?debug') !== -1); openerp.web.qweb.format_text_node = function(s) { // Note that 'this' is the Qweb Node of the text - var translation = this.node.parentElement.attributes['t-translation']; + var translation = this.node.parentNode.attributes['t-translation']; if (translation && translation.value === 'off') { return s; } -- cgit v1.2.3 From 1945d19d150544668de7020d7c67b2f2a327a128 Mon Sep 17 00:00:00 2001 From: "RavishchanraMurari (Open ERP)" Date: Mon, 24 Oct 2011 17:44:15 +0530 Subject: mulit_company_in group_by bzr revid: rmu@tinyerp.com-20111024121415-wkjyjzl6ydqz3t7o --- addons/web/static/src/js/search.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 45a0d40e96e..48d58b5776c 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -63,8 +63,9 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search rows.push(row); var filters = []; _.each(items, function (item) { - if(!item.attrs.hasOwnProperty('invisible') && item.attrs.invisible!=1) - { + if (item.attrs.invisible === '1') { + return; + } if (filters.length && item.tag !== 'filter') { row.push( new openerp.web.search.FilterGroup( @@ -101,7 +102,7 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search item, fields[item['attrs'].name])); } } - } + }, this); if (filters.length) { row.push(new openerp.web.search.FilterGroup(filters, this)); -- cgit v1.2.3 From a8b81ed5754ef0f2495b28b517f2a5b7ed9ba749 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 24 Oct 2011 15:55:21 +0200 Subject: [ADD] dropdown arrow next to import autocompletes bzr revid: xmo@openerp.com-20111024135521-aikh791r9j94moal --- addons/web/static/src/js/data_import.js | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data_import.js b/addons/web/static/src/js/data_import.js index 711e790dfaa..025ff8df1c5 100644 --- a/addons/web/static/src/js/data_import.js +++ b/addons/web/static/src/js/data_import.js @@ -205,6 +205,10 @@ openerp.web.DataImport = openerp.web.Dialog.extend({ return; } + this.$element.delegate('.oe-m2o-drop-down-button', 'click', function () { + $(this).prev('input').focus(); + }); + var self = this; this.ready.then(function () { var $fields = self.$element.find('.sel_fields').bind('blur', function () { -- cgit v1.2.3 From b45b7ad22cce753a00fff13981502e2c807cee79 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 24 Oct 2011 16:06:58 +0200 Subject: [IMP] import: only show second step once file has been uploaded bzr revid: xmo@openerp.com-20111024140658-8t9csv9i6gd30luj --- addons/web/static/src/js/data_import.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data_import.js b/addons/web/static/src/js/data_import.js index 025ff8df1c5..42f0cf8d680 100644 --- a/addons/web/static/src/js/data_import.js +++ b/addons/web/static/src/js/data_import.js @@ -80,7 +80,7 @@ openerp.web.DataImport = openerp.web.Dialog.extend({ this.toggle_import_button(false); this.$element.find('#csvfile').change(this.on_autodetect_data); this.$element.find('fieldset').change(this.on_autodetect_data); - this.$element.find('fieldset legend').click(function() { + this.$element.delegate('fieldset legend', 'click', function() { $(this).next().toggle(); }); this.ready.push(new openerp.web.DataSet(this, this.model).call( -- cgit v1.2.3 From cd59e5e6fbf07bb1783dde48ecdafa73000d33c4 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 24 Oct 2011 16:17:37 +0200 Subject: [ADD] open/close arrow next to import options bzr revid: xmo@openerp.com-20111024141737-bk2rg08wvll1hgno --- addons/web/static/src/js/data_import.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data_import.js b/addons/web/static/src/js/data_import.js index 42f0cf8d680..a284669732d 100644 --- a/addons/web/static/src/js/data_import.js +++ b/addons/web/static/src/js/data_import.js @@ -81,7 +81,7 @@ openerp.web.DataImport = openerp.web.Dialog.extend({ this.$element.find('#csvfile').change(this.on_autodetect_data); this.$element.find('fieldset').change(this.on_autodetect_data); this.$element.delegate('fieldset legend', 'click', function() { - $(this).next().toggle(); + $(this).parent().toggleClass('oe-closed'); }); this.ready.push(new openerp.web.DataSet(this, this.model).call( 'fields_get', [], function (fields) { -- cgit v1.2.3 From 06344150ebf2860247929c76f3fc6d9b43ca27b9 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 24 Oct 2011 16:27:44 +0200 Subject: [FIX] automatically open options box if the file fails to parse entirely bzr revid: xmo@openerp.com-20111024142744-zeal912gqf9bvrrp --- addons/web/static/src/js/data_import.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data_import.js b/addons/web/static/src/js/data_import.js index a284669732d..355c6c1b493 100644 --- a/addons/web/static/src/js/data_import.js +++ b/addons/web/static/src/js/data_import.js @@ -194,9 +194,11 @@ openerp.web.DataImport = openerp.web.Dialog.extend({ : with_headers ? results.records.slice(1) : results.records })); + this.$element.find('fieldset').addClass('oe-closed'); } else if (results['error']) { result_node.append(QWeb.render('ImportView.error', { 'error': results['error']})); + this.$element.find('fieldset').removeClass('oe-closed'); } else if (results['success']) { if (this.widget_parent.widget_parent.active_view == "list") { this.widget_parent.reload_content(); @@ -204,6 +206,7 @@ openerp.web.DataImport = openerp.web.Dialog.extend({ this.stop(); return; } + this.$element.find('form').removeClass('oe-import-no-result'); this.$element.delegate('.oe-m2o-drop-down-button', 'click', function () { $(this).prev('input').focus(); -- cgit v1.2.3 From 84a383d5aa7c3ef6a2fc38fb06953b447d831651 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 24 Oct 2011 17:11:58 +0200 Subject: [IMP] make notebooks in page view identical to those of normal form view as requested by fp bzr revid: xmo@openerp.com-20111024151158-7hqox4k6xrjujxnb --- addons/web/static/src/js/view_form.js | 4 ---- 1 file changed, 4 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 7d3f96925e0..aa1fbab90e1 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2813,9 +2813,6 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ } }); -openerp.web.form.WidgetNotebookReadonly = openerp.web.form.WidgetNotebook.extend({ - template: 'WidgetNotebook.readonly' -}); openerp.web.form.FieldReadonly = openerp.web.form.Field.extend({ }); @@ -2934,7 +2931,6 @@ openerp.web.form.widgets = new openerp.web.Registry({ 'statusbar': 'openerp.web.form.FieldStatus' }); openerp.web.form.readonly = openerp.web.form.widgets.clone({ - 'notebook': 'openerp.web.form.WidgetNotebookReadonly', 'char': 'openerp.web.form.FieldCharReadonly', 'email': 'openerp.web.form.FieldEmailReadonly', 'url': 'openerp.web.form.FieldUrlReadonly', -- cgit v1.2.3 From 19bb1dda1a0d59b3010f06b53e47473ee0923105 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 24 Oct 2011 17:20:13 +0200 Subject: [IMP] use empty box/check mark for page boolean fields, instead of cross vs check mark bzr revid: xmo@openerp.com-20111024152013-nhi8kwra46se0yva --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index aa1fbab90e1..a8ccfcb3e46 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2848,7 +2848,7 @@ openerp.web.form.FieldUrlReadonly = openerp.web.form.FieldURIReadonly.extend({ }); openerp.web.form.FieldBooleanReadonly = openerp.web.form.FieldCharReadonly.extend({ set_value: function (value) { - this._super(value ? '\u2714' : '\u2718'); + this._super(value ? '\u2611' : '\u2610'); } }); openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend({ -- cgit v1.2.3 From 6cb7f2b6f9cad1bd02dda34ad283342e1565995e Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 24 Oct 2011 17:20:56 +0200 Subject: [imp] m2o now supports readonly mode bzr revid: nicolas.vanhoren@openerp.com-20111024152056-2nfx7zk4kc9py17k --- addons/web/static/src/js/view_form.js | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a8ccfcb3e46..1f1b5b8ef6f 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1628,6 +1628,11 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ } else { $("#" + self.cm_id + " .oe_m2o_menu_item_mandatory").addClass("oe-m2o-disabled-cm"); } + if (!self.readonly) { + $("#" + self.cm_id + " .oe_m2o_menu_item_noreadonly").removeClass("oe-m2o-disabled-cm"); + } else { + $("#" + self.cm_id + " .oe_m2o_menu_item_noreadonly").addClass("oe-m2o-disabled-cm"); + } return true; }, menuStyle: {width: "200px"} }); @@ -1647,6 +1652,8 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ } }); this.$drop_down.click(function() { + if (self.readonly) + return; if (self.$input.autocomplete("widget").is(":visible")) { self.$input.autocomplete("close"); } else { @@ -1853,6 +1860,10 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ }, focus: function () { this.$input.focus(); + }, + update_dom: function() { + this._super.apply(this, arguments); + this.$input.attr('disabled', this.readonly); } }); -- cgit v1.2.3 From f097e140b8b51437258ae03000b37f1677f6098b Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Tue, 25 Oct 2011 00:54:31 +0200 Subject: [IMP] try session instead of openerp,db and we would rename Session into Connection bzr revid: al@openerp.com-20111024225431-g9eaqophnw3k8hh4 --- addons/web/static/src/js/views.js | 86 +++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 43 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index f402a51bf7e..b7a3d185bc1 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -2,21 +2,21 @@ * OpenERP web library *---------------------------------------------------------*/ -openerp.web.views = function(db) { +openerp.web.views = function(session) { -var _t = db.web._t; +var _t = session.web._t; /** * Registry for all the client actions key: tag value: widget */ -db.web.client_actions = new db.web.Registry(); +session.web.client_actions = new session.web.Registry(); /** * Registry for all the main views */ -db.web.views = new db.web.Registry(); +session.web.views = new session.web.Registry(); -db.web.ActionManager = db.web.Widget.extend({ +session.web.ActionManager = session.web.Widget.extend({ identifier_prefix: "actionmanager", init: function(parent) { this._super(parent); @@ -93,20 +93,20 @@ db.web.ActionManager = db.web.Widget.extend({ ir_actions_act_window: function (action, on_close) { if (action.target === 'new') { if (this.dialog == null) { - this.dialog = new db.web.Dialog(this, { title: action.name, width: '80%' }); + this.dialog = new session.web.Dialog(this, { title: action.name, width: '80%' }); if(on_close) this.dialog.on_close.add(on_close); this.dialog.start(); } else { this.dialog_viewmanager.stop(); } - this.dialog_viewmanager = new db.web.ViewManagerAction(this, action); + this.dialog_viewmanager = new session.web.ViewManagerAction(this, action); this.dialog_viewmanager.appendTo(this.dialog.$element); this.dialog.open(); } else { this.dialog_stop(); this.content_stop(); - this.inner_viewmanager = new db.web.ViewManagerAction(this, action); + this.inner_viewmanager = new session.web.ViewManagerAction(this, action); this.inner_viewmanager.appendTo(this.$element); this.url_update(action); } @@ -124,7 +124,7 @@ db.web.ActionManager = db.web.Widget.extend({ if (this.dialog && action.context) { var model = action.context.active_model; if (model === 'base.module.upgrade' || model === 'base.setup.installer' || model === 'base.module.upgrade') { - db.webclient.do_reload(); + session.webclient.do_reload(); } } this.dialog_stop(); @@ -140,7 +140,7 @@ db.web.ActionManager = db.web.Widget.extend({ }, ir_actions_client: function (action) { this.content_stop(); - var ClientWidget = db.web.client_actions.get_object(action.tag); + var ClientWidget = session.web.client_actions.get_object(action.tag); (this.client_widget = new ClientWidget(this, action.params)).appendTo(this); }, ir_actions_report_xml: function(action) { @@ -164,12 +164,12 @@ db.web.ActionManager = db.web.Widget.extend({ } }); -db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ +session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.ViewManager# */{ identifier_prefix: "viewmanager", template: "ViewManager", /** - * @constructs db.web.ViewManager - * @extends db.web.Widget + * @constructs session.web.ViewManager + * @extends session.web.Widget * * @param parent * @param dataset @@ -185,10 +185,10 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ this.views_src = _.map(views, function(x) {return x instanceof Array? {view_id: x[0], view_type: x[1]} : x;}); this.views = {}; this.flags = this.flags || {}; - this.registry = db.web.views; + this.registry = session.web.views; }, render: function() { - return db.web.qweb.render(this.template, { + return session.web.qweb.render(this.template, { self: this, prefix: this.element_id, views: this.views_src}); @@ -284,7 +284,7 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ if (this.searchview) { this.searchview.stop(); } - this.searchview = new db.web.SearchView( + this.searchview = new session.web.SearchView( this, this.dataset, view_id, search_defaults, this.flags.search_view === false); @@ -334,13 +334,13 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ on_action_executed: function () {} }); -db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.ViewManagerAction# */{ +session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepnerp.web.ViewManagerAction# */{ template:"ViewManagerAction", /** - * @constructs db.web.ViewManagerAction - * @extends db.web.ViewManager + * @constructs session.web.ViewManagerAction + * @extends session.web.ViewManager * - * @param {db.web.ActionManager} parent parent object/widget + * @param {session.web.ActionManager} parent parent object/widget * @param {Object} action descriptor for the action this viewmanager needs to manage its views. */ init: function(parent, action) { @@ -350,7 +350,7 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View this._super(parent, null, action.views); this.session = parent.session; this.action = action; - var dataset = new db.web.DataSetSearch(this, action.res_model, action.context, action.domain); + var dataset = new session.web.DataSetSearch(this, action.res_model, action.context, action.domain); if (action.res_id) { dataset.ids.push(action.res_id); dataset.index = 0; @@ -400,12 +400,12 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View this.$element.find('.oe_get_xml_view').click(function () { // TODO: add search view? - $('
').text(db.web.json_node_to_xml(
+            $('
').text(session.web.json_node_to_xml(
                 self.views[self.active_view].controller.fields_view.arch, true))
                     .dialog({ width: '95%'});
         });
         if (this.action.help && !this.flags.low_profile) {
-            var Users = new db.web.DataSet(self, 'res.users'),
+            var Users = new session.web.DataSet(self, 'res.users'),
                 header = this.$element.find('.oe-view-manager-header');
             header.delegate('blockquote button', 'click', function() {
                 var $this = $(this);
@@ -451,7 +451,7 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View
         var grandparent = this.widget_parent && this.widget_parent.widget_parent;
         // display shortcuts if on the first view for the action
         var $shortcut_toggle = this.$element.find('.oe-shortcut-toggle');
-        if (!(grandparent instanceof db.web.WebClient) ||
+        if (!(grandparent instanceof session.web.WebClient) ||
             !(view.view_type === this.views_src[0].view_type
                 && view.view_id === this.views_src[0].view_id)) {
             $shortcut_toggle.hide();
@@ -488,7 +488,7 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View
      * Intercept do_action resolution from children views
      */
     on_action_executed: function () {
-        return new db.web.DataSet(this, 'res.log')
+        return new session.web.DataSet(this, 'res.log')
                 .call('get', [], this.do_display_log);
     },
     /**
@@ -515,7 +515,7 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View
     }
 });
 
-db.web.Sidebar = db.web.Widget.extend({
+session.web.Sidebar = session.web.Widget.extend({
     init: function(parent, element_id) {
         this._super(parent, element_id);
         this.items = {};
@@ -524,7 +524,7 @@ db.web.Sidebar = db.web.Widget.extend({
     start: function() {
         this._super(this);
         var self = this;
-        this.$element.html(db.web.qweb.render('Sidebar'));
+        this.$element.html(session.web.qweb.render('Sidebar'));
         this.$element.find(".toggle-sidebar").click(function(e) {
             self.do_toggle();
         });
@@ -601,7 +601,7 @@ db.web.Sidebar = db.web.Widget.extend({
 
         if(!$section) {
             section_id = _.uniqueId(this.element_id + '_section_' + code + '_');
-            var $section = $(db.web.qweb.render("Sidebar.section", {
+            var $section = $(session.web.qweb.render("Sidebar.section", {
                 section_id: section_id,
                 name: name,
                 classname: 'oe_sidebar_' + code,
@@ -633,7 +633,7 @@ db.web.Sidebar = db.web.Widget.extend({
                 this.items[items[i].element_id] = items[i];
             }
 
-            var $items = $(db.web.qweb.render("Sidebar.section.items", {items: items}));
+            var $items = $(session.web.qweb.render("Sidebar.section.items", {items: items}));
 
             $items.find('a.oe_sidebar_action_a').click(function() {
                 var item = self.items[$(this).attr('id')];
@@ -687,7 +687,7 @@ db.web.Sidebar = db.web.Widget.extend({
     }
 });
 
-db.web.TranslateDialog = db.web.Dialog.extend({
+session.web.TranslateDialog = session.web.Dialog.extend({
     dialog_title: _t("Translations"),
     init: function(view) {
         // TODO fme: should add the language to fields_view_get because between the fields view get
@@ -707,14 +707,14 @@ db.web.TranslateDialog = db.web.Dialog.extend({
         this.translatable_fields_keys = _.map(this.view.translatable_fields || [], function(i) { return i.name });
         this.languages = null;
         this.languages_loaded = $.Deferred();
-        (new db.web.DataSetSearch(this, 'res.lang', this.view.dataset.get_context(),
+        (new session.web.DataSetSearch(this, 'res.lang', this.view.dataset.get_context(),
             [['translatable', '=', '1']])).read_slice(['code', 'name'], { sort: 'id' }, this.on_languages_loaded);
     },
     start: function() {
         var self = this;
         this._super();
         $.when(this.languages_loaded).then(function() {
-            self.$element.html(db.web.qweb.render('TranslateDialog', { widget: self }));
+            self.$element.html(session.web.qweb.render('TranslateDialog', { widget: self }));
             self.$element.tabs();
             if (!(self.view.translatable_fields && self.view.translatable_fields.length)) {
                 self.hide_tabs('fields');
@@ -819,7 +819,7 @@ db.web.TranslateDialog = db.web.Dialog.extend({
     }
 });
 
-db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{
+session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
     template: "EmptyComponent",
     set_default_options: function(options) {
         this.options = options || {};
@@ -833,7 +833,7 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{
     },
     open_translate_dialog: function(field) {
         if (!this.translate_dialog) {
-            this.translate_dialog = new db.web.TranslateDialog(this).start();
+            this.translate_dialog = new session.web.TranslateDialog(this).start();
         }
         this.translate_dialog.open(field);
     },
@@ -845,7 +845,7 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{
      * @param {String} [action_data.special=null] special action handlers (currently: only ``'cancel'``)
      * @param {String} [action_data.type='workflow'] the action type, if present, one of ``'object'``, ``'action'`` or ``'workflow'``
      * @param {Object} [action_data.context=null] additional action context, to add to the current context
-     * @param {db.web.DataSet} dataset a dataset object used to communicate with the server
+     * @param {session.web.DataSet} dataset a dataset object used to communicate with the server
      * @param {Object} [record_id] the identifier of the object on which the action is to be applied
      * @param {Function} on_closed callback to execute when dialog is closed or when the action does not generate any result (no new action)
      */
@@ -857,12 +857,12 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{
                 return self.widget_parent.on_action_executed.apply(null, arguments);
             }
         };
-        var context = new db.web.CompoundContext(dataset.get_context(), action_data.context || {});
+        var context = new session.web.CompoundContext(dataset.get_context(), action_data.context || {});
         
         var handler = function (r) {
             var action = r.result;
             if (action && action.constructor == Object) {
-                var ncontext = new db.web.CompoundContext(context);
+                var ncontext = new session.web.CompoundContext(context);
                 if (record_id) {
                     ncontext.add({
                         active_id: record_id,
@@ -899,7 +899,7 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{
     /**
      * Directly set a view to use instead of calling fields_view_get. This method must
      * be called before start(). When an embedded view is set, underlying implementations
-     * of db.web.View must use the provided view instead of any other one.
+     * of session.web.View must use the provided view instead of any other one.
      *
      * @param embedded_view A view.
      */
@@ -917,7 +917,7 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{
     },
     on_sidebar_manage_views: function() {
         if (this.fields_view && this.fields_view.arch) {
-            $('' + db.web.json_node_to_xml(this.fields_view.arch, true) + '').dialog({ width: '95%', height: 600});
+            $('' + session.web.json_node_to_xml(this.fields_view.arch, true) + '').dialog({ width: '95%', height: 600});
         } else {
             this.do_warn("Manage Views", "Could not find current view declaration");
         }
@@ -929,11 +929,11 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{
         console.log('Todo');
     },
     on_sidebar_import: function() {
-        var import_view = new db.web.DataImport(this, this.dataset);
+        var import_view = new session.web.DataImport(this, this.dataset);
         import_view.start();
     },
     on_sidebar_export: function() {
-        var export_view = new db.web.DataExport(this, this.dataset);
+        var export_view = new session.web.DataExport(this, this.dataset);
         export_view.start();
     },
     on_sidebar_translate: function() {
@@ -943,7 +943,7 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{
     }
 });
 
-db.web.json_node_to_xml = function(node, single_quote, indent) {
+session.web.json_node_to_xml = function(node, single_quote, indent) {
     // For debugging purpose, this function will convert a json node back to xml
     // Maybe usefull for xml view editor
 
@@ -972,7 +972,7 @@ db.web.json_node_to_xml = function(node, single_quote, indent) {
         r += '>\n';
         var childs = [];
         for (var i = 0, ii = node.children.length; i < ii; i++) {
-            childs.push(db.web.json_node_to_xml(node.children[i], single_quote, indent + 1));
+            childs.push(session.web.json_node_to_xml(node.children[i], single_quote, indent + 1));
         }
         r += childs.join('\n');
         r += '\n' + sindent + '';
-- 
cgit v1.2.3


From 96339d71609b4e51b59341026cb1882abe16ed56 Mon Sep 17 00:00:00 2001
From: "Yogesh (OpenERP)" 
Date: Tue, 25 Oct 2011 12:13:23 +0530
Subject: [FIX]

bzr revid: ysa@tinyerp.com-20111025064323-ds0o146bi1r83kd5
---
 addons/web/static/src/js/views.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'addons/web/static/src/js')

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");
-- 
cgit v1.2.3