diff options
| author | Christophe Simonis <chs@odoo.com> | 2017-09-21 18:52:56 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2017-09-21 18:52:56 +0200 |
| commit | 4b455098f8cefa5122479a5a84fa07c2330e7a66 (patch) | |
| tree | 43d625a9e37a5d9c07780f8116bf0247fb693fe0 /addons/web/static/src/js/fields | |
| parent | f53e65c356a5d43d2b5b50dc509ee70e0df30ba5 (diff) | |
| parent | 5c51a0ad4d6bfab6427949ffe61650196798846a (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.js | 51 | ||||
| -rw-r--r-- | addons/web/static/src/js/fields/field_registry.js | 1 | ||||
| -rw-r--r-- | addons/web/static/src/js/fields/relational_fields.js | 13 |
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); |
