diff options
| author | Christophe Simonis <chs@odoo.com> | 2018-11-06 16:40:07 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2018-11-06 16:40:07 +0100 |
| commit | b106b7ce0bfac5d4f955dc98be9a35d79e0947ff (patch) | |
| tree | 48bb187b80b2b10f7a1d76bf5116bf3ea16669a2 /addons/web/static/src/js | |
| parent | 478691b95de9eb0d03c145e547a773de40ca9a4d (diff) | |
| parent | dd70c684268b538f02ea4fa0425f9b70136b3300 (diff) | |
[MERGE] forward port branch 12.0 up to dd70c684268
Diffstat (limited to 'addons/web/static/src/js')
10 files changed, 57 insertions, 5 deletions
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index bf46c538c23..d9e15dab302 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -1106,6 +1106,13 @@ var FieldX2Many = AbstractField.extend({ } return def.then(function () { self.pager.updateState({ size: self.value.count }); + var newEval = self._evalColumnInvisibleFields(); + if (!_.isEqual(self.currentColInvisibleFields, newEval)) { + self.currentColInvisibleFields = newEval; + self.renderer.updateState(self.value, { + columnInvisibleFields: self.currentColInvisibleFields, + }); + } }); }, /** diff --git a/addons/web/static/src/js/fields/special_fields.js b/addons/web/static/src/js/fields/special_fields.js index 5a6aa8cfd28..90c4f589989 100644 --- a/addons/web/static/src/js/fields/special_fields.js +++ b/addons/web/static/src/js/fields/special_fields.js @@ -100,6 +100,25 @@ var FieldTimezoneMismatch = FieldSelection.extend({ this._renderDateTimeTimezone(); } }, + /** + * @override + * @private + * this.$el can have other elements than select + * that should not be touched + */ + _renderEdit: function () { + // FIXME: hack to handle multiple root elements + // in this.$el , which is a bad idea + // In master we should make this.$el a wrapper + // around multiple subelements + var $otherEl = this.$el.not('select'); + this.$el = this.$el.first(); + + this._super.apply(this, arguments); + + $otherEl.insertAfter(this.$el); + this.$el = this.$el.add($otherEl); + }, }); var FieldReportLayout = relational_fields.FieldMany2One.extend({ diff --git a/addons/web/static/src/js/services/crash_manager.js b/addons/web/static/src/js/services/crash_manager.js index 406693b67ca..e1da816c8e5 100644 --- a/addons/web/static/src/js/services/crash_manager.js +++ b/addons/web/static/src/js/services/crash_manager.js @@ -130,7 +130,11 @@ var CrashManager = core.Class.extend({ clipboard = new window.ClipboardJS($clipboardBtn[0], { text: function () { return (_t("Error") + ":\n" + error.message + "\n\n" + error.data.debug).trim(); - } + }, + // Container added because of Bootstrap modal that give the focus to another element. + // We need to give to correct focus to ClipboardJS (see in ClipboardJS doc) + // https://github.com/zenorocha/clipboard.js/issues/155 + container: dialog.el, }); clipboard.on("success", function (e) { _.defer(function () { diff --git a/addons/web/static/src/js/views/abstract_view.js b/addons/web/static/src/js/views/abstract_view.js index 7705ee5972e..8f9f167c69f 100644 --- a/addons/web/static/src/js/views/abstract_view.js +++ b/addons/web/static/src/js/views/abstract_view.js @@ -162,6 +162,11 @@ var AbstractView = Class.extend({ this.controllerParams.withControlPanel = params.withControlPanel; } + var groupBy = params.groupBy; + if (typeof groupBy === 'string') { + groupBy = [groupBy]; + } + this.loadParams = { context: params.context, count: params.count || ((this.controllerParams.ids !== undefined) && @@ -172,7 +177,7 @@ var AbstractView = Class.extend({ comparisonTimeRange: comparisonTimeRange, comparisonTimeRangeDescription: comparisonTimeRangeDescription, compare: compare, - groupedBy: params.groupBy, + groupedBy: groupBy, modelName: params.modelName, res_id: params.currentId, res_ids: params.ids, diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index a16a1df35a4..0701c1d1046 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -3931,11 +3931,12 @@ var BasicModel = AbstractModel.extend({ */ _postprocess: function (record, options) { var self = this; + var viewType = options && options.viewType || record.viewType; var defs = []; _.each(record.getFieldNames(options), function (name) { var field = record.fields[name]; - var fieldInfo = record.fieldsInfo[record.viewType][name] || {}; + var fieldInfo = record.fieldsInfo[viewType][name] || {}; var options = fieldInfo.options || {}; if (options.always_reload) { if (record.fields[name].type === 'many2one' && record.data[name]) { @@ -3944,7 +3945,7 @@ var BasicModel = AbstractModel.extend({ model: field.relation, method: 'name_get', args: [element.data.id], - context: self._getContext(record, {fieldName: name}), + context: self._getContext(record, {fieldName: name, viewType: viewType}), }) .then(function (result) { element.data.display_name = result[0][1]; diff --git a/addons/web/static/src/js/views/basic/basic_view.js b/addons/web/static/src/js/views/basic/basic_view.js index 9e1cde2aada..eb3efe7001d 100644 --- a/addons/web/static/src/js/views/basic/basic_view.js +++ b/addons/web/static/src/js/views/basic/basic_view.js @@ -150,6 +150,14 @@ var BasicView = AbstractView.extend({ } } } + // Many2one: context is not the same between the different views + // this means the result of a name_get could differ + if (fieldType === 'many2one') { + if (JSON.stringify(record.data[name].context) !== + JSON.stringify(fieldInfo.context)) { + fieldNames.push(name); + } + } } }); diff --git a/addons/web/static/src/js/views/kanban/kanban_column.js b/addons/web/static/src/js/views/kanban/kanban_column.js index ffb63ad9083..57ecc6f4b4e 100644 --- a/addons/web/static/src/js/views/kanban/kanban_column.js +++ b/addons/web/static/src/js/views/kanban/kanban_column.js @@ -173,6 +173,7 @@ var KanbanColumn = Widget.extend({ * into a fragment, the focus has to be set manually once in the DOM. */ on_attach_callback: function () { + _.invoke(this.records, 'on_attach_callback'); if (this.quickCreateWidget) { this.quickCreateWidget.on_attach_callback(); } diff --git a/addons/web/static/src/js/views/kanban/kanban_controller.js b/addons/web/static/src/js/views/kanban/kanban_controller.js index 0c26e38c18b..25fb88c7bd4 100644 --- a/addons/web/static/src/js/views/kanban/kanban_controller.js +++ b/addons/web/static/src/js/views/kanban/kanban_controller.js @@ -273,7 +273,7 @@ var KanbanController = BasicController.extend({ _onButtonNew: function () { var state = this.model.get(this.handle, {raw: true}); var quickCreateEnabled = this.quickCreateEnabled && viewUtils.isQuickCreateEnabled(state); - if (this.on_create === 'quick_create' && quickCreateEnabled) { + if (this.on_create === 'quick_create' && quickCreateEnabled && state.data.length) { // Activate the quick create in the first column this.renderer.addQuickCreate(); } else if (this.on_create && this.on_create !== 'quick_create') { diff --git a/addons/web/static/src/js/views/kanban/kanban_renderer.js b/addons/web/static/src/js/views/kanban/kanban_renderer.js index ca5882c965d..32101d0cd00 100644 --- a/addons/web/static/src/js/views/kanban/kanban_renderer.js +++ b/addons/web/static/src/js/views/kanban/kanban_renderer.js @@ -127,6 +127,7 @@ var KanbanRenderer = BasicRenderer.extend({ * Called each time the renderer is attached into the DOM. */ on_attach_callback: function () { + this._isInDom = true; _.invoke(this.widgets, 'on_attach_callback'); if (this.quickCreate) { this.quickCreate.on_attach_callback(); @@ -136,6 +137,7 @@ var KanbanRenderer = BasicRenderer.extend({ * Called each time the renderer is detached from the DOM. */ on_detach_callback: function () { + this._isInDom = false; _.invoke(this.widgets, 'on_detach_callback'); }, @@ -381,6 +383,7 @@ var KanbanRenderer = BasicRenderer.extend({ * @private */ _renderView: function () { + var self = this; var oldWidgets = this.widgets; this.widgets = []; this.$el.empty(); @@ -401,6 +404,9 @@ var KanbanRenderer = BasicRenderer.extend({ var defs = this.defs; return this._super.apply(this, arguments).then(function () { _.invoke(oldWidgets, 'destroy'); + if (self._isInDom) { + _.invoke(self.widgets, 'on_attach_callback'); + } return $.when.apply(null, defs); }); }, diff --git a/addons/web/static/src/js/views/search/favorites_menu.js b/addons/web/static/src/js/views/search/favorites_menu.js index 47e99aec573..a40f38d4095 100644 --- a/addons/web/static/src/js/views/search/favorites_menu.js +++ b/addons/web/static/src/js/views/search/favorites_menu.js @@ -19,6 +19,7 @@ return Widget.extend({ }, 'click .o_save_search': function (ev) { ev.preventDefault(); + ev.stopPropagation(); this.toggle_save_menu(); }, 'click .o_save_name button': 'save_favorite', |
