');
- _.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 $('
')
.data('name', node.attrs.name || '_default_')
diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js
index 3118937d3ee..2c6d01fab6b 100644
--- a/addons/web/static/tests/views/form_tests.js
+++ b/addons/web/static/tests/views/form_tests.js
@@ -340,6 +340,37 @@ QUnit.module('Views', {
form.destroy();
});
+ QUnit.test('first notebook page invisible', function (assert) {
+ assert.expect(2);
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '
',
+ res_id: 1,
+ });
+
+ assert.ok(form.$('.o_notebook .nav li:first()').hasClass('o_form_invisible'),
+ 'first tab should be invisible');
+ assert.ok(form.$('.o_notebook .nav li:nth(1)').hasClass('active'),
+ 'second tab should be active');
+
+ form.destroy();
+ });
+
QUnit.test('invisible attrs on group are re-evaluated on field change', function (assert) {
assert.expect(2);