summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/form_widgets.js
diff options
context:
space:
mode:
authorqsm-odoo <qsm@odoo.com>2015-07-31 17:51:48 +0200
committerqsm-odoo <qsm@odoo.com>2015-08-03 13:09:42 +0200
commit53fc284945e97822b05ad14804d22b47a523dbcc (patch)
tree4ecaae39e0172fb9760a62b1b362b5960b95eb8a /addons/web/static/src/js/views/form_widgets.js
parent6eef9750519c9e7d2543f47ae450161322440c5c (diff)
[IMP] web: New priority widget + form field
Diffstat (limited to 'addons/web/static/src/js/views/form_widgets.js')
-rw-r--r--addons/web/static/src/js/views/form_widgets.js93
1 files changed, 44 insertions, 49 deletions
diff --git a/addons/web/static/src/js/views/form_widgets.js b/addons/web/static/src/js/views/form_widgets.js
index 9fa8a9115ea..bda63d57fc2 100644
--- a/addons/web/static/src/js/views/form_widgets.js
+++ b/addons/web/static/src/js/views/form_widgets.js
@@ -11,6 +11,7 @@ var common = require('web.form_common');
var formats = require('web.formats');
var framework = require('web.framework');
var Model = require('web.DataModel');
+var Priority = require('web.Priority');
var pyeval = require('web.pyeval');
var session = require('web.session');
var utils = require('web.utils');
@@ -248,60 +249,54 @@ var KanbanSelection = FieldChar.extend({
},
});
-var Priority = FieldChar.extend({
- init: function (field_manager, node) {
- this._super(field_manager, node);
+var FieldPriority = common.AbstractField.extend({
+ events: {
+ 'mouseup': function(e) {
+ e.stopPropagation();
+ },
},
- prepare_priority: function() {
- var self = this;
- var selection = this.field.selection || [];
- var init_value = selection && selection[0][0] || 0;
- var data = _.map(selection.slice(1), function(element, index) {
- var value = {
- 'value': element[0],
- 'name': element[1],
- 'click_value': element[0],
- };
- if (index === 0 && self.get('value') === element[0]) {
- value['click_value'] = init_value;
- }
- return value;
+ start: function() {
+ this.priority = new Priority(this, {
+ readonly: this.get('readonly'),
+ value: this.get('value'),
+ values: this.field.selection || [],
});
- return data;
- },
- render_value: function() {
- this.priorities = this.prepare_priority();
- this.$el.html(QWeb.render("FormPriority", {'widget': this}));
- if (!this.get('readonly')){
- this.$el.find('li').on('click', this.set_priority.bind(this));
- }
- },
- /* setting the value: in view mode, perform an asynchronous call and reload
- the form view; in edit mode, use set_value to save the new value that will
- be written when saving the record. */
- set_priority: function (ev) {
- var self = this;
- var li = $(ev.target).closest('li');
- if (li.length) {
- var value = String(li.data('value'));
- if (this.view.get('actual_mode') == 'view') {
+
+ this.priority.on('update', this, function(update) {
+ /* setting the value: in view mode, perform an asynchronous call and reload
+ the form view; in edit mode, use set_value to save the new value that will
+ be written when saving the record. */
+ var view = this.view;
+ if(view.get('actual_mode') === 'view') {
var write_values = {};
- write_values[self.name] = value;
- return this.view.dataset._model.call(
- 'write', [
- [this.view.datarecord.id],
- write_values,
- self.view.dataset.get_context()
- ]).done(self.reload_record.bind(self));
- }
- else {
- return this.set_value(value);
+ write_values[this.name] = update.value;
+ view.dataset._model.call('write', [
+ [view.datarecord.id],
+ write_values,
+ view.dataset.get_context()
+ ]).done(function() {
+ view.reload();
+ });
+ } else {
+ this.set_value(update.value);
}
- }
+ });
+
+ this.on('change:readonly', this, function() {
+ this.priority.readonly = this.get('readonly');
+ var $div = $('<div/>').insertAfter(this.$el);
+ this.priority.replace($div);
+ this.setElement(this.priority.$el);
+ });
+ var self = this;
+ return $.when(this._super(), this.priority.appendTo('<div>').then(function() {
+ self.priority.$el.addClass(self.$el.attr('class'));
+ self.replaceElement(self.priority.$el);
+ }));
},
- reload_record: function() {
- this.view.reload();
+ render_value: function() {
+ this.priority.set_value(this.get('value'));
},
});
@@ -1611,7 +1606,7 @@ core.form_widget_registry
.add('binary', FieldBinaryFile)
.add('statusbar', FieldStatus)
.add('monetary', FieldMonetary)
- .add('priority', Priority)
+ .add('priority', FieldPriority)
.add('kanban_state_selection', KanbanSelection)
.add('statinfo', StatInfo)
.add('timezone_mismatch', TimezoneMismatch)