diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-07-26 15:12:29 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-07-26 15:12:29 +0200 |
| commit | bfd34e14b1be97465e135d85c76b9e626a219e7a (patch) | |
| tree | 8de54ec8f504158e965ab92e21658cab539024ee /addons/web/static/src/js/views | |
| parent | 26b5b446b3dab3d66b7db054ca77e7b1a811c28a (diff) | |
| parent | 40e8b67179f212551a176d72b3851671febc1fba (diff) | |
[MERGE] forward port branch saas-12.3 up to 40e8b67179f
Diffstat (limited to 'addons/web/static/src/js/views')
8 files changed, 83 insertions, 53 deletions
diff --git a/addons/web/static/src/js/views/form/form_controller.js b/addons/web/static/src/js/views/form/form_controller.js index 660c7dc81e1..5aef3d54bfa 100644 --- a/addons/web/static/src/js/views/form/form_controller.js +++ b/addons/web/static/src/js/views/form/form_controller.js @@ -623,9 +623,12 @@ var FormController = BasicController.extend({ * @private * @param {OdooEvent} event */ - _onFormDialogDiscarded: function(e) { - e.stopPropagation(); - this.renderer.focusLastActivatedWidget(); + _onFormDialogDiscarded: function(ev) { + ev.stopPropagation(); + var isFocused = this.renderer.focusLastActivatedWidget(); + if (ev.data.callback) { + ev.data.callback(_.str.toBool(isFocused)); + } }, /** * Opens a one2many record (potentially new) in a dialog. This handler is diff --git a/addons/web/static/src/js/views/form/form_renderer.js b/addons/web/static/src/js/views/form/form_renderer.js index 9efadaabe30..cee79966a51 100644 --- a/addons/web/static/src/js/views/form/form_renderer.js +++ b/addons/web/static/src/js/views/form/form_renderer.js @@ -194,8 +194,11 @@ var FormRenderer = BasicRenderer.extend({ * field. */ focusLastActivatedWidget: function () { - this._activateNextFieldWidget(this.state, this.lastActivatedFieldIndex - 1, - { noAutomaticCreate: true }); + if (this.lastActivatedFieldIndex !== -1) { + return this._activateNextFieldWidget(this.state, this.lastActivatedFieldIndex - 1, + { noAutomaticCreate: true }); + } + return false; }, /** * returns the active tab pages for each notebook diff --git a/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js b/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js index 0c484931aae..6a9caa99a39 100644 --- a/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js +++ b/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js @@ -150,7 +150,7 @@ var KanbanColumnProgressBar = Widget.extend({ }); // Adapt active state - $bar.toggleClass('active progress-bar-striped', key === self.activeFilter); + $bar.toggleClass('progress-bar-animated progress-bar-striped', key === self.activeFilter); // Adapt width $bar.removeClass('o_bar_has_records transition-off'); diff --git a/addons/web/static/src/js/views/list/list_editable_renderer.js b/addons/web/static/src/js/views/list/list_editable_renderer.js index 6469b78347a..3c36720081e 100644 --- a/addons/web/static/src/js/views/list/list_editable_renderer.js +++ b/addons/web/static/src/js/views/list/list_editable_renderer.js @@ -480,34 +480,41 @@ ListRenderer.include({ * Returns the relative width according to the widget or the field type. * @see _renderHeader * - * @param {Object} column a `field` arch node + * @param {Object} column an arch node + * @returns {integer | string} either a weight factor (number) or a css + * width description (string) */ _getColumnWidthFactor: function (column) { - if (column.attrs.width) { - // the width attribute has precedence on the width factor - return 0; + if (!this.state.fieldsInfo.list[column.attrs.name]) { + // Unnamed columns get default value + return 1; + } + var field = this.state.fields[column.attrs.name]; + if (!field) { + // this is not a field. Probably a button or something of unknown + // width. + return 1; } - var fieldType = this.state.fields[column.attrs.name].type; var widget = this.state.fieldsInfo.list[column.attrs.name].Widget.prototype; if ('widthFactor' in widget) { return widget.widthFactor; } - switch (fieldType) { + switch (field.type) { case 'binary': return 1; - case 'boolean': return 0.4; + case 'boolean': return '40px'; case 'char': return 1; - case 'date': return 1; - case 'datetime': return 1.5; - case 'float': return 1; + case 'date': return '100px'; + case 'datetime': return '150px'; + case 'float': return '100px'; case 'html': return 3; - case 'integer': return 0.8; - case 'many2many': return 2.2; - case 'many2one': return 1.5; + case 'integer': return '80px'; + case 'many2many': return 2; + case 'many2one': return 2; case 'monetary': return 1.2; - case 'one2many': return 2.2; + case 'one2many': return 2.5; case 'reference': return 1.5; case 'selection': return 1.5; - case 'text': return 3; + case 'text': return 2.5; default: return 1; } }, @@ -720,24 +727,26 @@ ListRenderer.include({ }); }, /** - * Overridden to set weights on columns for the fixed layout. + * Overridden to set weights or explicit width on columns for the fixed layout. * * @override * @private */ _processColumns: function () { this._super.apply(this, arguments); - if (this.editable) { var self = this; this.columns.forEach(function (column) { - if (column.attrs.width_factor) { + if (column.attrs.width) { + // nothing to do + } else if (column.attrs.width_factor) { column.attrs.widthFactor = parseFloat(column.attrs.width_factor, 10); } else { - if (column.tag === 'field') { - column.attrs.widthFactor = self._getColumnWidthFactor(column); + var factor = self._getColumnWidthFactor(column); + if (typeof factor === 'string') { + column.attrs.width = factor; } else { - column.attrs.widthFactor = 1; + column.attrs.widthFactor = factor; } } }); @@ -818,15 +827,18 @@ ListRenderer.include({ var $thead = this._super.apply(this, arguments); if (this.editable) { + // we compute the sum of the weights for each columns, excluding + // those with a fixed width. var totalWidth = this.columns.reduce(function (acc, column) { - return acc + column.attrs.widthFactor; + return acc + (column.attrs.widthFactor || 0); }, 0); this.columns.forEach(function (column) { - var $cell = $thead.find('th[data-name=' + column.attrs.name + ']'); - if (column.attrs.width) { - $cell.css('width', column.attrs.width); - } else if (column.attrs.widthFactor) { - $cell.css('width', (column.attrs.widthFactor / totalWidth * 100) + '%'); + if (column.attrs.width || column.attrs.widthFactor) { + var width = column.attrs.width || ((column.attrs.widthFactor / totalWidth * 100) + '%'); + var $th = $thead.find('th[data-name=' + column.attrs.name + ']'); + if ($th.data('name')) { + $th.css('width', width); + } } }); } diff --git a/addons/web/static/src/js/views/list/list_model.js b/addons/web/static/src/js/views/list/list_model.js index 41178498c96..25fdf28954c 100644 --- a/addons/web/static/src/js/views/list/list_model.js +++ b/addons/web/static/src/js/views/list/list_model.js @@ -52,17 +52,19 @@ odoo.define('web.ListModel', function (require) { var model = records[0].model; var recordResIds = _.pluck(records, 'res_id'); var fieldNames = records[0].getFieldNames(); + var context = records[0].getContext(); return this._rpc({ model: model, method: 'write', args: [recordResIds, changes], - context: records[0].getContext(), + context: context, }).then(function () { return self._rpc({ model: model, method: 'read', args: [recordResIds, fieldNames], + context: context, }); }).then(function (results) { results.forEach(function (data) { @@ -94,14 +96,7 @@ odoo.define('web.ListModel', function (require) { options = options || {}; options.fetchRecordsWithGroups = true; return this._super(list, options).then(function (result) { - var prom; - if (!list.parentID) { - // groupbys buttons are only displayed on the first level of - // groupby so no need to fetch the extra fields for inner - // groups - prom = self._readGroupExtraFields(list); - } - return Promise.resolve(prom).then(_.constant(result)); + return self._readGroupExtraFields(list).then(_.constant(result)); }); }, /** diff --git a/addons/web/static/src/js/views/list/list_renderer.js b/addons/web/static/src/js/views/list/list_renderer.js index df6345d398f..f7efaab1798 100644 --- a/addons/web/static/src/js/views/list/list_renderer.js +++ b/addons/web/static/src/js/views/list/list_renderer.js @@ -599,16 +599,22 @@ var ListRenderer = BasicRenderer.extend({ var colspanBeforeAggregate; if (firstAggregateIndex !== -1) { // if there are aggregates, the first $th goes until the first - // aggregate then all cells between aggregates are rendered, then - // there is a last $th for the pager + // aggregate then all cells between aggregates are rendered colspanBeforeAggregate = firstAggregateIndex; var lastAggregateIndex = _.findLastIndex(this.columns, function (column) { return column.tag === 'field' && _.contains(aggregateKeys, column.attrs.name); }); cells = cells.concat(aggregateCells.slice(firstAggregateIndex, lastAggregateIndex + 1)); - cells.push($('<th>').attr('colspan', this.columns.length - 1 - lastAggregateIndex)); + var colSpan = this.columns.length - 1 - lastAggregateIndex; + if (colSpan > 0) { + cells.push($('<th>').attr('colspan', colSpan)); + } } else { - colspanBeforeAggregate = this.columns.length; + var colN = this.columns.length; + colspanBeforeAggregate = colN > 1 ? colN - 1 : 1; + if (colN > 1) { + cells.push($('<th>')); + } } if (this.hasSelectors) { colspanBeforeAggregate += 1; @@ -616,11 +622,11 @@ var ListRenderer = BasicRenderer.extend({ $th.attr('colspan', colspanBeforeAggregate); if (group.isOpen && !group.groupedBy.length && (group.count > group.data.length)) { - var $lastCell = cells[cells.length - 1]; var $pager = this._renderGroupPager(group); - $lastCell.addClass('o_group_pager').append($pager); + var $lastCell = cells[cells.length - 1]; + $lastCell.append($pager); } - if (groupLevel === 0 && group.isOpen && this.groupbys[groupBy]) { + if (group.isOpen && this.groupbys[groupBy]) { var $buttons = this._renderGroupButtons(group, this.groupbys[groupBy]); if ($buttons.length) { var $buttonSection = $('<div>', { diff --git a/addons/web/static/src/js/views/pivot/pivot_model.js b/addons/web/static/src/js/views/pivot/pivot_model.js index bf7c70e2859..a544ab15593 100644 --- a/addons/web/static/src/js/views/pivot/pivot_model.js +++ b/addons/web/static/src/js/views/pivot/pivot_model.js @@ -430,6 +430,7 @@ var PivotModel = AbstractModel.extend({ } if ('domain' in params) { this.data.domain = params.domain; + this.initialDomain = params.domain; } else { this.data.domain = this.initialDomain; } diff --git a/addons/web/static/src/js/views/view_dialogs.js b/addons/web/static/src/js/views/view_dialogs.js index e35f09a6cc9..f665bf49791 100644 --- a/addons/web/static/src/js/views/view_dialogs.js +++ b/addons/web/static/src/js/views/view_dialogs.js @@ -243,8 +243,13 @@ var FormViewDialog = ViewDialog.extend({ * @override */ _focusOnClose: function() { - this.trigger_up('form_dialog_discarded'); - return true; + var isFocusSet = false; + this.trigger_up('form_dialog_discarded', { + callback: function (isFocused) { + isFocusSet = isFocused; + }, + }); + return isFocusSet; }, /** @@ -425,8 +430,13 @@ var SelectCreateDialog = ViewDialog.extend({ * @override */ _focusOnClose: function() { - this.trigger_up('form_dialog_discarded'); - return true; + var isFocusSet = false; + this.trigger_up('form_dialog_discarded', { + callback: function (isFocused) { + isFocusSet = isFocused; + }, + }); + return isFocusSet; }, }); |
