From acfe41a9054eaa56a0209a836d7a0b62f7387f5a Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 29 Apr 2013 12:51:26 +0200 Subject: [PATCH 1/2] Got working widget bzr revid: nicolas.vanhoren@openerp.com-20130429105126-c4g504lbsp64m29t --- addons/web_kanban/static/src/js/kanban.js | 40 ++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index b02f8d12151..8d17a8e03aa 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -133,12 +133,16 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ } switch (node.tag) { case 'field': - if (this.fields_view.fields[node.attrs.name].type === 'many2many') { + var ftype = this.fields_view.fields[node.attrs.name].type; + ftype = node.attrs.widget ? node.attrs.widget : ftype; + if (ftype === 'many2many') { if (_.indexOf(this.many2manys, node.attrs.name) < 0) { this.many2manys.push(node.attrs.name); } node.tag = 'div'; node.attrs['class'] = (node.attrs['class'] || '') + ' oe_form_field oe_tags'; + } else if (instance.web_kanban.fields_registry.contains(ftype)) { + // do nothing, the kanban record will handle it } else { node.tag = QWeb.prefix; node.attrs[QWeb.prefix + '-esc'] = 'record.' + node.attrs['name'] + '.value'; @@ -766,6 +770,7 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({ }; } this.state = this.view.state.records[this.id]; + this.fields = {}; }, set_record: function(record) { var self = this; @@ -779,7 +784,11 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({ this.record = this.transform_record(record); }, start: function() { + var self = this; this._super(); + this.$("[data-field_id]").each(function() { + self.add_widget($(this)); + }); this.$el.data('widget', this); this.bind_events(); }, @@ -815,6 +824,27 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({ 'content': this.view.qweb.render('kanban-box', this.qweb_context) }); this.replaceElement($el); + this.replace_fields(); + }, + replace_fields: function() { + var self = this; + this.$("field").each(function() { + var $field = $(this); + var $nfield = $(" Date: Mon, 29 Apr 2013 13:04:46 +0200 Subject: [PATCH 2/2] stabilized api bzr revid: nicolas.vanhoren@openerp.com-20130429110446-pqmbfg3fxjks6vb0 --- addons/web_kanban/static/src/js/kanban.js | 39 ++++++++++++++++++++--- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 8d17a8e03aa..2e690432a3b 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -843,7 +843,7 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({ var type = field.type; type = $orig.attr("widget") ? $orig.attr("widget") : type; var obj = instance.web_kanban.fields_registry.get_object(type); - var widget = new obj(this, $orig); + var widget = new obj(this, field, $orig); widget.replace($node); }, bind_events: function() { @@ -1145,13 +1145,42 @@ instance.web_kanban.QuickCreate = instance.web.Widget.extend({ } }); -instance.web_kanban.TestField = instance.web.Widget.extend({ - renderElement: function() { - this.$el.text("yop"); +/** + * Interface to be implemented by kanban fields. + * + */ +instance.web_kanban.FieldInterface = { + /** + Constructor. + - parent: The widget's parent. + - field: A dictionary giving details about the field, including the current field's value in the + raw_value field. + - $node: The field tag as it appears in the view, encapsulated in a jQuery object. + */ + init: function(parent, field, $node) {}, +}; + +/** + * Abstract class for classes implementing FieldInterface. + * + * Properties: + * - value: useful property to hold the value of the field. By default, the constructor + * sets value property. + * + */ +instance.web_kanban.AbstractField = instance.web.Widget.extend(instance.web_kanban.FieldInterface, { + /** + Constructor that saves the field and $node parameters and sets the "value" property. + */ + init: function(parent, field, $node) { + this._super(parent); + this.field = field; + this.$node = $node; + this.set("value", field.raw_value); }, }); -instance.web_kanban.fields_registry = new instance.web.Registry({"char": "instance.web_kanban.TestField"}); +instance.web_kanban.fields_registry = new instance.web.Registry({}); }; // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: