summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-11-06 16:40:07 +0100
committerChristophe Simonis <chs@odoo.com>2018-11-06 16:40:07 +0100
commitb106b7ce0bfac5d4f955dc98be9a35d79e0947ff (patch)
tree48bb187b80b2b10f7a1d76bf5116bf3ea16669a2 /addons/web/static/src
parent478691b95de9eb0d03c145e547a773de40ca9a4d (diff)
parentdd70c684268b538f02ea4fa0425f9b70136b3300 (diff)
[MERGE] forward port branch 12.0 up to dd70c684268
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/fields/relational_fields.js7
-rw-r--r--addons/web/static/src/js/fields/special_fields.js19
-rw-r--r--addons/web/static/src/js/services/crash_manager.js6
-rw-r--r--addons/web/static/src/js/views/abstract_view.js7
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js5
-rw-r--r--addons/web/static/src/js/views/basic/basic_view.js8
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_column.js1
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_controller.js2
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_renderer.js6
-rw-r--r--addons/web/static/src/js/views/search/favorites_menu.js1
-rw-r--r--addons/web/static/src/scss/kanban_view.scss16
11 files changed, 59 insertions, 19 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',
diff --git a/addons/web/static/src/scss/kanban_view.scss b/addons/web/static/src/scss/kanban_view.scss
index 1a2e9889b43..c771d6a37ab 100644
--- a/addons/web/static/src/scss/kanban_view.scss
+++ b/addons/web/static/src/scss/kanban_view.scss
@@ -283,20 +283,8 @@
}
.o_attachment_image > img {
- overflow: hidden;
- padding-top: 75%;
-
- .o_attachment_image {
- @include o-position-absolute(0, 0, 0, 0);
- background-size: cover;
- background-position: center;
- transform: scale(1.05);
- transition: all 0.3s;
- }
-
- &:hover .o_attachment_image {
- transform: scale(1);
- }
+ width: 100%;
+ height: auto;
}
.o_progressbar {