diff --git a/addons/account/static/src/js/account_payment_widget.js b/addons/account/static/src/js/account_payment_widget.js index a78794a8f75..07194b4d38b 100644 --- a/addons/account/static/src/js/account_payment_widget.js +++ b/addons/account/static/src/js/account_payment_widget.js @@ -10,7 +10,6 @@ var QWeb = core.qweb; var ShowPaymentLineWidget = AbstractField.extend({ - supportedFieldTypes: ['text'], render: function() { var self = this; var info = JSON.parse(this.value); diff --git a/addons/calendar/static/src/js/base_calendar.js b/addons/calendar/static/src/js/base_calendar.js index 1bab8931fae..688aa7c8f1a 100644 --- a/addons/calendar/static/src/js/base_calendar.js +++ b/addons/calendar/static/src/js/base_calendar.js @@ -101,6 +101,7 @@ WebClient.include({ }); var Many2ManyAttendee = FieldMany2ManyTags.extend({ + supported_field_types: [], tag_template: "Many2ManyAttendeeTag", // FIXME: This widget used to refetch the relational data fields needed to // its rendering. Basically, all usual fields for tags plus "status". diff --git a/addons/hr_attendance/static/src/js/field_widget.js b/addons/hr_attendance/static/src/js/field_widget.js index a7dae3b54c8..f8a884702f7 100644 --- a/addons/hr_attendance/static/src/js/field_widget.js +++ b/addons/hr_attendance/static/src/js/field_widget.js @@ -10,7 +10,6 @@ var _t = core._t; var PresenceIndicator = AbstractField.extend({ template: 'PresenceIndicator', - supportedFieldTypes: ['selection'], start: function() { this.$el.tooltip({title: _t("Employee Presence
Green: checked in
Red: checked out"), trigger: 'hover'}); diff --git a/addons/lunch/static/src/js/lunch.js b/addons/lunch/static/src/js/lunch.js index b2d0dbbdbe4..0f6b9b5cb8a 100644 --- a/addons/lunch/static/src/js/lunch.js +++ b/addons/lunch/static/src/js/lunch.js @@ -14,6 +14,7 @@ var LunchPreviousOrdersWidget = FieldMany2Many.extend({ events: { 'click .o_add_button': 'set_order_line', }, + supported_field_types: [], init: function() { this._super.apply(this, arguments); this.lunch_data = {}; diff --git a/addons/mrp/static/src/js/mrp.js b/addons/mrp/static/src/js/mrp.js index b532e591849..a40f43beabb 100644 --- a/addons/mrp/static/src/js/mrp.js +++ b/addons/mrp/static/src/js/mrp.js @@ -10,7 +10,6 @@ var _t = core._t; var SetBulletStatus = AbstractField.extend({ - supportedFieldTypes: ['selection'], init: function() { this._super.apply(this, arguments); this.classes = this.nodeOptions && this.nodeOptions.classes || {}; @@ -28,7 +27,6 @@ var SetBulletStatus = AbstractField.extend({ }); var TimeCounter = AbstractField.extend({ - supportedFieldTypes: ['float'], start_time_counter: function(){ var self = this; clearTimeout(this.timer); diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index af2fdb50349..15bb042c072 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -117,7 +117,7 @@ var InputField = AbstractField.extend({ }); var FieldChar = InputField.extend({ - supportedFieldTypes: ['char', 'text'], + supportedFieldTypes: ['char'], tagName: 'span', }); @@ -125,7 +125,7 @@ var FieldDate = InputField.extend({ className: "o_form_field_date", tagName: "span", replace_element: true, - supportedFieldTypes: ['date', 'datetime'], + supportedFieldTypes: ['date'], start: function () { var self = this; @@ -711,7 +711,11 @@ var PriorityWidget = AbstractField.extend({ this._setValue(new_value); }, }, - supportedFieldTypes: ['integer'], + supportedFieldTypes: ['selection'], + + is_set: function() { + return true; + }, render_star: function (tag, is_full, value, tip) { return $(tag) .attr('title', tip) @@ -722,11 +726,13 @@ var PriorityWidget = AbstractField.extend({ }, _render: function () { var self = this; - var value = parseInt(this.value, 10); + var index_value = this.value ? _.findIndex(this.field.selection, function (v) { + return v[0] === self.value; + }) : 0; this.$el.empty(); this.empty_value = this.field.selection[0][0]; - _.each(this.field.selection.slice(1), function (choice) { - self.$el.append(self.render_star('', value >= parseInt(choice[0]), choice[0], choice[1])); + _.each(this.field.selection.slice(1), function(choice, index) { + self.$el.append(self.render_star('', index_value >= index+1, choice[1])); }); }, }); @@ -851,7 +857,7 @@ var FieldBooleanButton = AbstractField.extend({ }); var FieldID = InputField.extend({ - supportedFieldTypes: ['integer'], + supportedFieldTypes: ['id'], init: function () { this._super.apply(this, arguments); this.mode = 'readonly'; diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index 460f66ff66f..3f20d802209 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -117,6 +117,7 @@ var FieldMany2One = AbstractRelationalField.extend({ 'click .o_external_button': '_onExternalButtonClick', 'click': '_onClick', }), + supported_field_types: ['many2one'], init: function () { this._super.apply(this, arguments); diff --git a/addons/web/static/src/js/fields/upgrade_fields.js b/addons/web/static/src/js/fields/upgrade_fields.js index 8d72cecf391..bbfd9b5b5d1 100644 --- a/addons/web/static/src/js/fields/upgrade_fields.js +++ b/addons/web/static/src/js/fields/upgrade_fields.js @@ -119,6 +119,7 @@ var UpgradeBoolean = FieldBoolean.extend(AbstractFieldUpgrade, { events: _.extend({}, FieldBoolean.prototype.events, { 'click input': '_onInputClicked', }), + supported_field_types: [], //-------------------------------------------------------------------------- // Private @@ -142,6 +143,7 @@ var UpgradeRadio = FieldRadio.extend(AbstractFieldUpgrade, { events: _.extend({}, FieldRadio.prototype.events, { 'click input:last': '_onInputClicked', }), + supported_field_types: [], //-------------------------------------------------------------------------- // Public diff --git a/addons/web/static/src/js/views/kanban/kanban_record.js b/addons/web/static/src/js/views/kanban/kanban_record.js index b2b170851e8..2527592c36e 100644 --- a/addons/web/static/src/js/views/kanban/kanban_record.js +++ b/addons/web/static/src/js/views/kanban/kanban_record.js @@ -7,11 +7,11 @@ var field_registry = require('web.field_registry'); var field_utils = require('web.field_utils'); var framework = require('web.framework'); var session = require('web.session'); -var time = require('web.time'); var utils = require('web.utils'); var Widget = require('web.Widget'); var QWeb = core.qweb; +var _t = core._t; var KanbanRecord = Widget.extend({ template: 'KanbanView.record', @@ -96,27 +96,34 @@ var KanbanRecord = Widget.extend({ // the widget doesn't exist yet, so instanciate it var Widget = field_registry.getAny(['kanban.' + field_widget, field_widget]); - // some field's attrs might be record dependent (they start with - // 't-att-') and should thus be evaluated, which is done by qweb - // we here replace those attrs in the dict of attrs of the state - // by their evaluted value, to make it transparent from the - // field's widgets point of view - // that dict being shared between records, we don't modify it - // in place - var attrs = Object.create(null); - _.each(self.state.fieldAttrs[field_name], function (value, key) { - if (_.str.startsWith(key, 't-att-')) { - key = key.slice(6); - value = $field.attr(key); - } - attrs[key] = value; - }); - self.state.fieldAttrs[field_name] = attrs; + if (Widget) { + // some field's attrs might be record dependent (they start with + // 't-att-') and should thus be evaluated, which is done by qweb + // we here replace those attrs in the dict of attrs of the state + // by their evaluted value, to make it transparent from the + // field's widgets point of view + // that dict being shared between records, we don't modify it + // in place + var attrs = Object.create(null); + _.each(self.state.fieldAttrs[field_name], function (value, key) { + if (_.str.startsWith(key, 't-att-')) { + key = key.slice(6); + value = $field.attr(key); + } + attrs[key] = value; + }); + self.state.fieldAttrs[field_name] = attrs; - widget = new Widget(self, field_name, self.state, self.options); - self.sub_widgets[field_name] = widget; - self._set_field_display(widget, field_name); - widget.replace($field); + widget = new Widget(self, field_name, self.state, self.options); + self.sub_widgets[field_name] = widget; + self._set_field_display(widget, field_name); + widget.replace($field); + } else if (core.debug) { + // the widget is not implemented + $field.replaceWith($('', { + text: _.str.sprintf(_t('[No widget %s]'), field_widget), + })); + } } else { // a widget already exists for that field, so reset it with the new state widget.reset(self.state); diff --git a/addons/website/static/src/js/website.backend.js b/addons/website/static/src/js/website.backend.js index 14645618e01..6b6f4658ff5 100644 --- a/addons/website/static/src/js/website.backend.js +++ b/addons/website/static/src/js/website.backend.js @@ -10,7 +10,6 @@ var _t = core._t; var WidgetWebsiteButton = AbstractField.extend({ template: 'WidgetWebsiteButton', - supportedFieldTypes: ['boolean'], render: function () { this._super.apply(this, arguments);