From 878df7ff9d37026a7ac7bc481dde9a3409dfb19d Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 31 Mar 2011 12:40:12 +0200 Subject: [PATCH] [IMP] use registry object for search view bzr revid: xmo@openerp.com-20110331104012-6etgbo83b528wziv --- addons/base/static/src/js/search.js | 73 +++++++++++++---------------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index c6523bef7e0..52c501bcc77 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -73,47 +73,20 @@ openerp.base.SearchView = openerp.base.Controller.extend({ * @returns openerp.base.search.Field */ make_field: function (item, field) { - // TODO: should fetch from an actual registry - // TODO: register fields in self? - switch (field.type) { - case 'char': - case 'text': - return new openerp.base.search.CharField( - item, field, this); - case 'boolean': - return new openerp.base.search.BooleanField( - item, field, this); - case 'integer': - return new openerp.base.search.IntegerField( - item, field, this); - case 'float': - return new openerp.base.search.FloatField( - item, field, this); - case 'selection': - return new openerp.base.search.SelectionField( - item, field, this); - case 'datetime': - return new openerp.base.search.DateTimeField( - item, field, this); - case 'date': - return new openerp.base.search.DateField( - item, field, this); - case 'one2many': - return new openerp.base.search.OneToManyField( - item, field, this); - case 'many2one': - return new openerp.base.search.ManyToOneField( - item, field, this); - case 'many2many': - return new openerp.base.search.ManyToManyField( - item, field, this); - default: - console.group('Unknown field type ' + field.type); - console.error('View node', item); - console.info('View field', field); - console.info('In view', this); - console.groupEnd(); - return null; + try { + return new (openerp.base.search.fields.get_object(field.type)) + (item, field, this); + } catch (e) { + if (! e instanceof openerp.base.KeyNotFound) { + throw e; + } + // KeyNotFound means unknown field type + console.group('Unknown field type ' + field.type); + console.error('View node', item); + console.info('View field', field); + console.info('In view', this); + console.groupEnd(); + return null; } }, on_loaded: function(data) { @@ -252,7 +225,25 @@ openerp.base.SearchView = openerp.base.Controller.extend({ } }); +/** @namespace */ openerp.base.search = {}; +/** + * Registry of search fields, called by :js:class:`openerp.base.SearchView` to + * find and instantiate its field widgets. + */ +openerp.base.search.fields = new openerp.base.Registry({ + 'char': 'openerp.base.search.CharField', + 'text': 'openerp.base.search.CharField', + 'boolean': 'openerp.base.search.BooleanField', + 'integer': 'openerp.base.search.IntegerField', + 'float': 'openerp.base.search.FloatField', + 'selection': 'openerp.base.search.SelectionField', + 'datetime': 'openerp.base.search.DateTimeField', + 'date': 'openerp.base.search.DateField', + 'one2many': 'openerp.base.search.OneToManyField', + 'many2one': 'openerp.base.search.ManyToOneField', + 'many2many': 'openerp.base.search.ManyToManyField' +}); openerp.base.search.Invalid = Class.extend( /** @lends openerp.base.search.Invalid# */{ /**