[IMP] legend widget
authorRGA(OpenERP) <>
Fri, 20 Dec 2013 12:10:19 +0000 (17:40 +0530)
committerRGA(OpenERP) <>
Fri, 20 Dec 2013 12:10:19 +0000 (17:40 +0530)
bzr revid: rgaopenerp-20131220121019-h1o0lllprbo02uqa

addons/web/static/src/js/view_form.js
addons/web/static/src/xml/base.xml
addons/web_kanban/static/src/js/kanban.js

index d31f8ff..a967a9c 100644 (file)
@@ -2330,33 +2330,52 @@ instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.we
         });
     }
 });
+
+instance.web.Legend = instance.web.Widget.extend({
+    init: function (parent, dataset, options) {
+        this._super(parent);
+        this.parent = parent;
+        this.dataset = dataset;
+        this.options = options; 
+    },
+    
+    render_value: function(record_id, data) {
+        var self = this;
+        self.record_id = record_id;
+        var content = QWeb.render("Legend."+ self.parent.name, data);
+        this.parent.$el.html(content);
+        if (!this.parent.get("effective_readonly")){
+            this.parent.$el.find('.oe_legend').click(self.do_action.bind(self));
+        }
+    },
+    do_action: function(e){
+        var self = this;
+        var li = $(e.target).closest( "li" );
+        if (li.length){
+            var value = li.data('value');
+            return self.dataset.call_button(self.options.action, [self.record_id, value, self.dataset.get_context()]).done(self.parent.reload_record.bind(self.parent));
+        }
+    }
+});
+
 instance.web.form.Legend = instance.web.form.FieldChar.extend({
     init: function (field_manager, node) {
         this._super(field_manager, node);
-        this.options = py.eval(node.attrs.options) 
-        this.legend_field = this.options.legend_field;
+        this.legend = new instance.web.Legend(this, this.view.dataset, py.eval(node.attrs.options));
     },
     
+    reload_record: function(){
+        this.view.reload();
+    },
     render_value: function() {
         var self = this;
-        var legend_value = this.field_manager.fields[this.legend_field].get_value()
-        var content = QWeb.render("Legend."+ self.name, {
+        var legend_field = this.options.legend_field;
+        var legend_value = this.field_manager.fields[legend_field].get_value();
+        self.legend.render_value(this.view.datarecord.id, {
             'widget': self, 
             'legend_value': legend_value,
             });
-        this.$el.html(content);
-        this.$el.find('li').click(self.execute_action.bind(self));
     },
-    execute_action: function(e){
-        var self = this;
-        var li = $(e.target).closest( "li" );
-        if (li.length){
-            var value = li.data('value');
-            return this.view.dataset.call_button(self.options.action, [this.view.datarecord.id, value, this.view.dataset.get_context()]).done(function(r) {
-                self.view.reload();
-            });
-        }
-    }
 });
 instance.web.form.FieldID = instance.web.form.FieldChar.extend({
     process_modifiers: function () {
index 12b2475..5dc8d21 100644 (file)
 <t t-name="Legend.kanban_state_legend">
     <div class="btn-group">
     <t t-foreach="widget.get('value')" t-as="rec">
-            <a  class="dropdown-toggle" data-toggle="dropdown" href="#" t-if="legend_value === rec.name"  t-att-title="rec.description" >
+            <a  class="dropdown-toggle oe_legend" data-toggle="dropdown" href="#" t-if="legend_value === rec.name"  t-att-title="rec.description" >
                 <t t-raw="rec.body" /> 
             </a>
     </t>
     <ul class="dropdown-menu with-arrow">
         <t t-foreach="widget.get('value')" t-as="rec">
             <t t-if="legend_value !== rec.name">
-                <li t-att-data-value="rec.name"><a href="#"><t t-raw="rec.body" /><t t-raw="rec.legend_name" /></a></li>
+                <li class="oe_legend" t-att-data-value="rec.name"><a href="#"><t t-raw="rec.body" /><t t-raw="rec.legend_name" /></a></li>
             </t>
         </t>
     </ul>
     <ul style="list-style: none; padding-left: 5px;">
     <t t-foreach="widget.get('value')" t-as="test" >
         <t t-if="legend_value gte test.name and !test_first">
-            <li  t-att-data-value="test.name - 1"  class="oe_left"><a href="#"><t t-raw="test.body"/></a></li>
+            <li t-att-data-value="test.name - 1"  class="oe_left oe_legend"><a href="#"><t t-raw="test.body"/></a></li>
         </t>
     </t>
     <t t-foreach="widget.get('value')" t-as="test" >
         <t t-if="legend_value lt test.name">
-            <li  t-att-data-value="test.name" class="oe_left"><a  href="#"><t t-raw="widget.get('value')[0].body"/></a></li>
+            <li t-att-data-value="test.name" class="oe_left oe_legend"><a  href="#"><t t-raw="widget.get('value')[0].body"/></a></li>
         </t>
     </t>
     </ul>
index ec5c8cc..888397c 100644 (file)
@@ -1233,31 +1233,22 @@ instance.web_kanban.AbstractField = instance.web.Widget.extend(instance.web_kanb
 instance.web_kanban.Legend = instance.web_kanban.AbstractField.extend({
     init: function(parent, field, $node) {
         this._super.apply(this, arguments);
-        this.parent = parent;
         this.name = $node.attr('name')
+        this.parent = parent;
+        this.legend = new instance.web.Legend(this, parent.view.dataset, this.options);
+    },
+    reload_record: function(){
+        this.parent.do_reload();
     },
     renderElement: function() {
         var self = this;
         var legend_field = this.options.legend_field;
-        var legend_field_value = this.parent.record[legend_field].raw_value 
-        var content = QWeb.render("Legend." + self.name, {
+        var legend_field_value = this.parent.record[legend_field].raw_value
+        self.legend.render_value(this.parent.id, {
             'widget': self, 
             'legend_value':  legend_field_value,
             });
-        this.$el.html(content);
-        this.$el.click(self.execute_action.bind(self));
-    },
-    execute_action: function(e){
-        e.preventDefault();
-        var li = $(e.target).closest( "li" );
-        if (li.length){
-            var parent = this.parent
-            var value = li.data('value');
-            return parent.view.dataset.call_button(this.options.action, [parent.id, value, parent.view.dataset.get_context()]).done(function(r) {
-                parent.do_reload();
-            });
-        }
-    } 
+    },
 });