summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2017-04-25 13:52:21 +0200
committerAaron Bohy <aab@odoo.com>2017-04-26 11:19:20 +0200
commit8f9362809e91ff7c2876ab464017abb13a4e0974 (patch)
treef45fb037165adfdbe0ab7e6b6ba729862d43cdc4 /addons/web/static/src
parent6fe55c370d2868152fabec18f38935a980890179 (diff)
[FIX] web: FormView: notebook: activate first visible tab
In a notebook, tabs may have an invisible attrs. The first visible tab should be active in any case. This wasn't working at the first rendering of the view, because the invisible attrs was evaluated for each tab, before processing the next ones, so the it couldn't find a next tab to activate. This fix ensures to process all tabs (i.e. generate their DOM element) before evaluating their invisible attrs, and trying to find which tab to activate.
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/views/form/form_renderer.js26
1 files changed, 18 insertions, 8 deletions
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 6955ca47c5c..82d2453c24e 100644
--- a/addons/web/static/src/js/views/form/form_renderer.js
+++ b/addons/web/static/src/js/views/form/form_renderer.js
@@ -335,8 +335,6 @@ var FormRenderer = BasicRenderer.extend({
});
this._registerModifiers(node, this.state, $label, {
callback: function (element, modifiers, record) {
- var recordWidgets = self.allFieldWidgets[record.id];
- var widget = _.findWhere(recordWidgets, {name: fieldName});
element.$el.toggleClass('o_form_label_empty', !!(
record.data.id
&& (modifiers.readonly || self.mode === 'readonly')
@@ -623,7 +621,11 @@ var FormRenderer = BasicRenderer.extend({
var self = this;
var $headers = $('<ul class="nav nav-tabs">');
var $pages = $('<div class="tab-content nav nav-tabs">');
- _.each(node.children, function (child, index) {
+ // renderedTabs is used to aggregate the generated $headers and $pages
+ // alongside their node, so that their modifiers can be registered once
+ // all tabs have been rendered, to ensure that the first visible tab
+ // is correctly activated
+ var renderedTabs = _.map(node.children, function (child, index) {
var pageID = _.uniqueId('notebook_page_');
var $header = self._renderTabHeader(child, pageID);
var $page = self._renderTabPage(child, pageID);
@@ -632,20 +634,28 @@ var FormRenderer = BasicRenderer.extend({
$page.addClass('active');
}
self._handleAttributes($header, child);
- self._registerModifiers(child, self.state, $header, {
- callback: function (element, modifiers, record) {
+ $headers.append($header);
+ $pages.append($page);
+ return {
+ $header: $header,
+ $page: $page,
+ node: child,
+ };
+ });
+ // register the modifiers for each tab
+ _.each(renderedTabs, function (tab) {
+ self._registerModifiers(tab.node, self.state, tab.$header, {
+ callback: function (element, modifiers) {
// if the active tab is invisible, activate the first visible tab instead
if (modifiers.invisible && element.$el.hasClass('active')) {
element.$el.removeClass('active');
- $page.removeClass('active');
+ tab.$page.removeClass('active');
var $firstVisibleTab = $headers.find('li:not(.o_form_invisible):first()');
$firstVisibleTab.addClass('active');
$pages.find($firstVisibleTab.find('a').attr('href')).addClass('active');
}
},
});
- $headers.append($header);
- $pages.append($page);
});
return $('<div class="o_notebook">')
.data('name', node.attrs.name || '_default_')