From 69fdc31167e3dc0396015a6190ca1636d784e88a Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 8 Feb 2012 13:39:15 +0100 Subject: [PATCH 1/4] [FIX] jquery-ui URL in test file bzr revid: xmo@openerp.com-20120208123915-cj5cujrpv41ilztm --- addons/web/static/test/test.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/test/test.html b/addons/web/static/test/test.html index da06aba2364..10c2a2c0ed2 100644 --- a/addons/web/static/test/test.html +++ b/addons/web/static/test/test.html @@ -13,7 +13,7 @@ - + From ff570e8d233eef4445105ed4700eba3da1942c1c Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 8 Feb 2012 13:43:09 +0100 Subject: [PATCH 2/4] [IMP] have registries remain linked so alterations to a parent registry alters its clone as well (if keys are not overwritten in the child) bzr revid: xmo@openerp.com-20120208124309-iho04vgae2nz6xix --- addons/web/static/src/js/core.js | 9 +++++++-- addons/web/static/test/registry.js | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 6bac3fa39e6..4495334aa23 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -254,6 +254,7 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry * @param {Object} mapping a mapping of keys to object-paths */ init: function (mapping) { + this.parent = null; this.map = mapping || {}; }, /** @@ -269,6 +270,9 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry get_object: function (key, silent_error) { var path_string = this.map[key]; if (path_string === undefined) { + if (this.parent) { + return this.parent.get_object(key, silent_error); + } if (silent_error) { return void 'nooo'; } throw new openerp.web.KeyNotFound(key); } @@ -327,8 +331,9 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry * @param {Object} [mapping={}] a mapping of keys to object-paths */ clone: function (mapping) { - return new openerp.web.Registry( - _.extend({}, this.map, mapping || {})); + var child = new openerp.web.Registry(mapping); + child.parent = this; + return child; } }); diff --git a/addons/web/static/test/registry.js b/addons/web/static/test/registry.js index 0a3e65e9b1c..9606dfae456 100644 --- a/addons/web/static/test/registry.js +++ b/addons/web/static/test/registry.js @@ -6,6 +6,7 @@ $(document).ready(function () { window.openerp.web.core(openerp); openerp.web.Foo = {}; openerp.web.Bar = {}; + openerp.web.Foo2 = {}; } }); test('key fetch', function () { @@ -30,4 +31,25 @@ $(document).ready(function () { .add('bar', 'openerp.web.Bar'); strictEqual(reg.get_object('bar'), openerp.web.Bar); }); + test('extension', function () { + var reg = new openerp.web.Registry({ + foo: 'openerp.web.Foo', + bar: 'openerp.web.Bar' + }); + + var reg2 = reg.clone({ 'foo': 'openerp.web.Foo2' }); + strictEqual(reg.get_object('foo'), openerp.web.Foo); + strictEqual(reg2.get_object('foo'), openerp.web.Foo2); + }); + test('remain-linked', function () { + var reg = new openerp.web.Registry({ + foo: 'openerp.web.Foo', + bar: 'openerp.web.Bar' + }); + + var reg2 = reg.clone(); + reg.add('foo2', 'openerp.web.Foo2'); + strictEqual(reg.get_object('foo2'), openerp.web.Foo2); + strictEqual(reg2.get_object('foo2'), openerp.web.Foo2); + }); }); From f5ee468ca5d6936688f8e8ae18a31ba65c8730ca Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 8 Feb 2012 13:46:34 +0100 Subject: [PATCH 3/4] [REF] rename Registry#clone to Registry#extend bzr revid: xmo@openerp.com-20120208124634-qucyuwlangw15nqh --- addons/web/static/src/js/core.js | 12 +++++++++++- addons/web/static/src/js/view_list_editable.js | 2 +- addons/web/static/src/js/view_page.js | 2 +- addons/web/static/test/registry.js | 4 ++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 4495334aa23..45e682d8bdf 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -328,12 +328,22 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry * Creates and returns a copy of the current mapping, with the provided * mapping argument added in (replacing existing keys if needed) * + * Parent and child remain linked, a new key in the parent (which is not + * overwritten by the child) will appear in the child. + * * @param {Object} [mapping={}] a mapping of keys to object-paths */ - clone: function (mapping) { + extend: function (mapping) { var child = new openerp.web.Registry(mapping); child.parent = this; return child; + }, + /** + * @deprecated use Registry#extend + */ + clone: function (mapping) { + console.warn('Registry#clone is deprecated, use Registry#extend'); + return this.extend(mapping); } }); diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index 4f6a1531c7a..3eae086539b 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -386,7 +386,7 @@ openerp.web.list_editable = function (openerp) { template: 'ListView.row.frame' }); var form_widgets = openerp.web.form.widgets; - openerp.web.list.form.widgets = form_widgets.clone({ + openerp.web.list.form.widgets = form_widgets.extend({ 'frame': 'openerp.web.list.form.WidgetFrame' }); // All form widgets inherit a problematic behavior from diff --git a/addons/web/static/src/js/view_page.js b/addons/web/static/src/js/view_page.js index d5c37419764..8a8148f8cae 100644 --- a/addons/web/static/src/js/view_page.js +++ b/addons/web/static/src/js/view_page.js @@ -242,7 +242,7 @@ openerp.web.page = function (openerp) { } } }); - openerp.web.page.readonly = openerp.web.form.widgets.clone({ + openerp.web.page.readonly = openerp.web.form.widgets.extend({ 'frame': 'openerp.web.page.WidgetFrameReadonly', 'char': 'openerp.web.page.FieldCharReadonly', 'id': 'openerp.web.page.FieldCharReadonly', diff --git a/addons/web/static/test/registry.js b/addons/web/static/test/registry.js index 9606dfae456..226b3c00566 100644 --- a/addons/web/static/test/registry.js +++ b/addons/web/static/test/registry.js @@ -37,7 +37,7 @@ $(document).ready(function () { bar: 'openerp.web.Bar' }); - var reg2 = reg.clone({ 'foo': 'openerp.web.Foo2' }); + var reg2 = reg.extend({ 'foo': 'openerp.web.Foo2' }); strictEqual(reg.get_object('foo'), openerp.web.Foo); strictEqual(reg2.get_object('foo'), openerp.web.Foo2); }); @@ -47,7 +47,7 @@ $(document).ready(function () { bar: 'openerp.web.Bar' }); - var reg2 = reg.clone(); + var reg2 = reg.extend(); reg.add('foo2', 'openerp.web.Foo2'); strictEqual(reg.get_object('foo2'), openerp.web.Foo2); strictEqual(reg2.get_object('foo2'), openerp.web.Foo2); From f70b73f2442434f863e6825896a856f903d2c3df Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 8 Feb 2012 14:06:51 +0100 Subject: [PATCH 4/4] [FIX] get_any with inheritance bzr revid: xmo@openerp.com-20120208130651-7mdv7p1qcfgxczon --- addons/web/static/src/js/core.js | 17 ++++++++++++++++- addons/web/static/test/registry.js | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 45e682d8bdf..887d57bd747 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -290,6 +290,21 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry } return object_match; }, + /** + * Checks if the registry contains an object mapping for this key. + * + * @param {String} key key to look for + */ + contains: function (key) { + if (key === undefined) { return false; } + if (key in this.map) { + return true + } + if (this.parent) { + return this.parent.contains(key); + } + return false; + }, /** * Tries a number of keys, and returns the first object matching one of * the keys. @@ -303,7 +318,7 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry get_any: function (keys) { for (var i=0; i