summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/fields
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-09-21 18:52:56 +0200
committerChristophe Simonis <chs@odoo.com>2017-09-21 18:52:56 +0200
commit4b455098f8cefa5122479a5a84fa07c2330e7a66 (patch)
tree43d625a9e37a5d9c07780f8116bf0247fb693fe0 /addons/web/static/src/js/fields
parentf53e65c356a5d43d2b5b50dc509ee70e0df30ba5 (diff)
parent5c51a0ad4d6bfab6427949ffe61650196798846a (diff)
[MERGE] forward port branch saas-18 up to 5c51a0ad4d6
Diffstat (limited to 'addons/web/static/src/js/fields')
-rw-r--r--addons/web/static/src/js/fields/basic_fields.js51
-rw-r--r--addons/web/static/src/js/fields/field_registry.js1
-rw-r--r--addons/web/static/src/js/fields/relational_fields.js13
3 files changed, 58 insertions, 7 deletions
diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js
index 7e6a330120e..911afea36e5 100644
--- a/addons/web/static/src/js/fields/basic_fields.js
+++ b/addons/web/static/src/js/fields/basic_fields.js
@@ -2391,6 +2391,56 @@ var AceEditor = DebouncedField.extend({
},
});
+var ImageSelection = AbstractField.extend({
+ supportedFieldTypes: ['selection'],
+ events: _.extend({}, AbstractField.prototype.events, {
+ 'click img': '_onImgClicked',
+ }),
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+ /**
+ * @override
+ * @private
+ */
+ _render: function () {
+ var self = this;
+ this.$el.empty();
+ _.each(this.nodeOptions, function (val, key) {
+ var $container = $('<div>').addClass('col-xs-3 text-center');
+ var $img = $('<img>')
+ .addClass('img img-responsive img-thumbnail ml16')
+ .toggleClass('btn-info', key === self.value)
+ .attr('src', val.image_link)
+ .data('key', key);
+ $container.append($img);
+ if (val.preview_link) {
+ var $previewLink = $('<a>')
+ .text('Preview')
+ .attr('href', val.preview_link)
+ .attr('target', '_blank');
+ $container.append($previewLink);
+ }
+ self.$el.append($container);
+ });
+ },
+
+ //--------------------------------------------------------------------------
+ // Handlers
+ //--------------------------------------------------------------------------
+
+ /**
+ * @override
+ * @private
+ * @param {MouseEvent} event
+ */
+ _onImgClicked: function (event) {
+ this._setValue($(event.currentTarget).data('key'));
+ },
+});
+
return {
TranslatableFieldMixin: TranslatableFieldMixin,
DebouncedField: DebouncedField,
@@ -2416,6 +2466,7 @@ return {
HandleWidget: HandleWidget,
InputField: InputField,
AttachmentImage: AttachmentImage,
+ ImageSelection: ImageSelection,
LabelSelection: LabelSelection,
StateSelectionWidget: StateSelectionWidget,
FavoriteWidget: FavoriteWidget,
diff --git a/addons/web/static/src/js/fields/field_registry.js b/addons/web/static/src/js/fields/field_registry.js
index 019a98e51f1..61e371d867a 100644
--- a/addons/web/static/src/js/fields/field_registry.js
+++ b/addons/web/static/src/js/fields/field_registry.js
@@ -37,6 +37,7 @@ registry
.add('monetary', basic_fields.FieldMonetary)
.add('priority', basic_fields.PriorityWidget)
.add('attachment_image', basic_fields.AttachmentImage)
+ .add('image_selection', basic_fields.ImageSelection)
.add('label_selection', basic_fields.LabelSelection)
.add('state_selection', basic_fields.StateSelectionWidget)
.add('kanban_state_selection', basic_fields.StateSelectionWidget)
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js
index 7df5b390a2c..90c2b08e1e5 100644
--- a/addons/web/static/src/js/fields/relational_fields.js
+++ b/addons/web/static/src/js/fields/relational_fields.js
@@ -681,17 +681,16 @@ var FieldX2Many = AbstractField.extend({
var command = ev.data.changes[this.name];
// Here, we only consider 'UPDATE' commands with data, which occur
// with editable list view. In order to keep the current line in
- // edition, we call confirmChange which will reset the widgets
- // instead of re-rendering the list. 'UPDATE' commands with no data
- // can be ignored: they occur in one2manys when the record is
- // updated from a dialog and in this case, we can re-render the
- // whole subview.
+ // edition, we call confirmUpdate which will try to reset the widgets
+ // of the line being edited, and rerender the rest of the list.
+ // 'UPDATE' commands with no data can be ignored: they occur in
+ // one2manys when the record is updated from a dialog and in this
+ // case, we can re-render the whole subview.
if (command.operation === 'UPDATE' && command.data) {
var state = record.data[this.name];
var fieldNames = state.getFieldNames();
this._reset(record, ev);
- this.renderer.confirmChange(state, command.id, fieldNames, ev.initialEvent);
- return $.when();
+ return this.renderer.confirmUpdate(state, command.id, fieldNames, ev.initialEvent);
}
}
return this._super.apply(this, arguments);