From 359e2443d4cddd3f61e3df2d8b1909f66a120789 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 31 Mar 2011 12:57:51 +0200 Subject: [PATCH] [IMP] use Registry in forms bzr revid: xmo@openerp.com-20110331105751-aib329cpnpigbpu3 --- addons/base/static/src/js/form.js | 59 ++++++++++++++++++------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 44fec10d1e4..9c0f8e9bf6b 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -94,6 +94,7 @@ openerp.base.FormView = openerp.base.Controller.extend({ } }); +/** @namespace */ openerp.base.form = {}; openerp.base.form.Widget = openerp.base.Controller.extend({ @@ -239,15 +240,20 @@ openerp.base.form.WidgetFrame = openerp.base.form.Widget.extend({ handle_node: function(n) { var type = this.view.fields_view.fields[n.attrs.name] || {}; var widget_type = n.attrs.widget || type.type || n.tag; - if (openerp.base.widgets[widget_type]) { - var widget = new openerp.base.widgets[widget_type](this.view, n); + try { + var widget = new (openerp.base.form.widgets.get_object(widget_type)) + (this.view, n); if (n.tag == 'field' && n.attrs.nolabel != '1') { - var label = new openerp.base.widgets['label'](this.view, n); + var label = new (openerp.base.form.widgets.get_object('label')) + (this.view, n); label["for"] = widget; this.add_widget(label); } this.add_widget(widget); - } else { + } catch (e) { + if (!e instanceof openerp.base.KeyNotFound) { + throw e; + } this.log("Unhandled widget type : " + widget_type, n); } }, @@ -514,27 +520,30 @@ openerp.base.form.FieldReference = openerp.base.form.Field.extend({ } }); -openerp.base.widgets = { - 'group' : openerp.base.form.WidgetFrame, - 'notebook' : openerp.base.form.WidgetNotebook, - 'separator' : openerp.base.form.WidgetSeparator, - 'label' : openerp.base.form.WidgetLabel, - 'button' : openerp.base.form.WidgetButton, - 'char' : openerp.base.form.FieldChar, - 'email' : openerp.base.form.FieldEmail, - 'url' : openerp.base.form.FieldUrl, - 'text' : openerp.base.form.FieldText, - 'date' : openerp.base.form.FieldDate, - 'datetime' : openerp.base.form.FieldDatetime, - 'selection' : openerp.base.form.FieldSelection, - 'many2one' : openerp.base.form.FieldMany2One, - 'many2many' : openerp.base.form.FieldMany2Many, - 'one2many' : openerp.base.form.FieldOne2Many, - 'one2many_list' : openerp.base.form.FieldOne2Many, - 'reference' : openerp.base.form.FieldReference, - 'boolean' : openerp.base.form.FieldBoolean, - 'float' : openerp.base.form.FieldFloat -}; +/** + * Registry of form widgets, called by :js:`openerp.base.FormView` + */ +openerp.base.form.widgets = new openerp.base.Registry({ + 'group' : 'openerp.base.form.WidgetFrame', + 'notebook' : 'openerp.base.form.WidgetNotebook', + 'separator' : 'openerp.base.form.WidgetSeparator', + 'label' : 'openerp.base.form.WidgetLabel', + 'button' : 'openerp.base.form.WidgetButton', + 'char' : 'openerp.base.form.FieldChar', + 'email' : 'openerp.base.form.FieldEmail', + 'url' : 'openerp.base.form.FieldUrl', + 'text' : 'openerp.base.form.FieldText', + 'date' : 'openerp.base.form.FieldDate', + 'datetime' : 'openerp.base.form.FieldDatetime', + 'selection' : 'openerp.base.form.FieldSelection', + 'many2one' : 'openerp.base.form.FieldMany2One', + 'many2many' : 'openerp.base.form.FieldMany2Many', + 'one2many' : 'openerp.base.form.FieldOne2Many', + 'one2many_list' : 'openerp.base.form.FieldOne2Many', + 'reference' : 'openerp.base.form.FieldReference', + 'boolean' : 'openerp.base.form.FieldBoolean', + 'float' : 'openerp.base.form.FieldFloat' +}); };