Skip to content
This repository was archived by the owner on Sep 5, 2024. It is now read-only.

Commit 87e3b9c

Browse files
committed
fix(tabs): md-center-tabs causes tabs to not render
only apply the width = 999999px work around when pagination is enabled only one of center tabs or pagination can be activate at a time Fixes #11566. Relates to #11432.
1 parent 54e3413 commit 87e3b9c

File tree

10 files changed

+106
-17
lines changed

10 files changed

+106
-17
lines changed

docs/app/partials/layout-children.tmpl.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ <h3>Children within a Layout Container</h3>
137137
<demo-file name="index.html">
138138
<div layout="column" layout-gt-sm="row">
139139
<!-- In order to work within a layout-gt-sm, the flex directive needs to match.
140-
flex-gt-sm="33" will work when layout-gt-sm="row" is active", but flex="33" would
140+
flex-gt-sm="33" will work when layout-gt-sm="row" is active, but flex="33" would
141141
only apply when layout="column" is active. -->
142142
<div flex-gt-sm="33">
143143
column layout on mobile, <br/>flex 33% on gt-sm devices.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<div ng-cloak>
2+
<md-content>
3+
<md-tabs class="md-primary" md-center-tabs>
4+
<md-tab label="one">
5+
<md-content class="md-padding">
6+
<h2 class="md-display-1">Tab One</h2>
7+
<p class="md-body-1">
8+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla venenatis ante augue.
9+
Phasellus volutpat neque ac dui mattis vulputate. Etiam consequat aliquam cursus. In
10+
sodales pretium ultrices. Maecenas lectus est, sollicitudin consectetur felis nec,
11+
feugiat ultricies mi.
12+
</p>
13+
</md-content>
14+
</md-tab>
15+
<md-tab label="two">
16+
<md-content class="md-padding">
17+
<h2 class="md-display-1">Tab Two</h2>
18+
<p class="md-body-1">
19+
Morbi viverra, ante vel aliquet tincidunt, leo dolor pharetra quam, at semper massa
20+
orci nec magna. Donec posuere nec sapien sed laoreet. Etiam cursus nunc in
21+
condimentum facilisis. Etiam in tempor tortor. Vivamus faucibus egestas enim,
22+
at convallis diam pulvinar vel. Cras ac orci eget nisi maximus cursus.
23+
</p>
24+
</md-content>
25+
</md-tab>
26+
<md-tab label="three">
27+
<md-content class="md-padding">
28+
<h2 class="md-display-1">Tab Three</h2>
29+
<p class="md-body-1">
30+
Integer turpis erat, porttitor vitae mi faucibus, laoreet interdum tellus. Curabitur
31+
posuere molestie dictum. Morbi eget congue risus, quis rhoncus quam. Suspendisse
32+
vitae hendrerit erat, at posuere mi. Cras eu fermentum nunc. Sed id ante eu orci
33+
commodo volutpat non ac est.
34+
</p>
35+
</md-content>
36+
</md-tab>
37+
</md-tabs>
38+
</md-content>
39+
</div>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
(function () {
2+
'use strict';
3+
angular.module('tabsDemoCenterTabs', ['ngMaterial']);
4+
})();
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
* Style tab width to align with the MD spec:
3+
* https://material.io/archive/guidelines/components/tabs.html#tabs-specs
4+
*/
5+
md-tab-item {
6+
min-width: 72px;
7+
}
8+
@media (min-width: 960px) {
9+
md-tab-item {
10+
min-width: 160px;
11+
}
12+
}

src/components/tabs/demoDynamicHeight/index.html

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,48 @@
44
<md-tab label="one">
55
<md-content class="md-padding">
66
<h1 class="md-display-2">Tab One</h1>
7-
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla venenatis ante augue. Phasellus volutpat neque ac dui mattis vulputate. Etiam consequat aliquam cursus. In sodales pretium ultrices. Maecenas lectus est, sollicitudin consectetur felis nec, feugiat ultricies mi.</p>
7+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla venenatis ante augue.
8+
Phasellus volutpat neque ac dui mattis vulputate. Etiam consequat aliquam cursus. In
9+
sodales pretium ultrices. Maecenas lectus est, sollicitudin consectetur felis nec,
10+
feugiat ultricies mi.</p>
811
</md-content>
912
</md-tab>
1013
<md-tab label="two">
1114
<md-content class="md-padding">
1215
<h1 class="md-display-2">Tab Two</h1>
13-
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla venenatis ante augue. Phasellus volutpat neque ac dui mattis vulputate. Etiam consequat aliquam cursus. In sodales pretium ultrices. Maecenas lectus est, sollicitudin consectetur felis nec, feugiat ultricies mi. Aliquam erat volutpat. Nam placerat, tortor in ultrices porttitor, orci enim rutrum enim, vel tempor sapien arcu a tellus. Vivamus convallis sodales ante varius gravida. Curabitur a purus vel augue ultrices ultricies id a nisl. Nullam malesuada consequat diam, a facilisis tortor volutpat et. Sed urna dolor, aliquet vitae posuere vulputate, euismod ac lorem. Sed felis risus, pulvinar at interdum quis, vehicula sed odio. Phasellus in enim venenatis, iaculis tortor eu, bibendum ante. Donec ac tellus dictum neque volutpat blandit. Praesent efficitur faucibus risus, ac auctor purus porttitor vitae. Phasellus ornare dui nec orci posuere, nec luctus mauris semper.</p>
14-
<p>Morbi viverra, ante vel aliquet tincidunt, leo dolor pharetra quam, at semper massa orci nec magna. Donec posuere nec sapien sed laoreet. Etiam cursus nunc in condimentum facilisis. Etiam in tempor tortor. Vivamus faucibus egestas enim, at convallis diam pulvinar vel. Cras ac orci eget nisi maximus cursus. Nunc urna libero, viverra sit amet nisl at, hendrerit tempor turpis. Maecenas facilisis convallis mi vel tempor. Nullam vitae nunc leo. Cras sed nisl consectetur, rhoncus sapien sit amet, tempus sapien.</p>
15-
<p>Integer turpis erat, porttitor vitae mi faucibus, laoreet interdum tellus. Curabitur posuere molestie dictum. Morbi eget congue risus, quis rhoncus quam. Suspendisse vitae hendrerit erat, at posuere mi. Cras eu fermentum nunc. Sed id ante eu orci commodo volutpat non ac est. Praesent ligula diam, congue eu enim scelerisque, finibus commodo lectus.</p>
16+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla venenatis ante augue.
17+
Phasellus volutpat neque ac dui mattis vulputate. Etiam consequat aliquam cursus. In
18+
sodales pretium ultrices. Maecenas lectus est, sollicitudin consectetur felis nec,
19+
feugiat ultricies mi. Aliquam erat volutpat. Nam placerat, tortor in ultrices porttitor,
20+
orci enim rutrum enim, vel tempor sapien arcu a tellus. Vivamus convallis sodales ante
21+
varius gravida. Curabitur a purus vel augue ultrices ultricies id a nisl. Nullam
22+
malesuada consequat diam, a facilisis tortor volutpat et. Sed urna dolor, aliquet vitae
23+
posuere vulputate, euismod ac lorem. Sed felis risus, pulvinar at interdum quis,
24+
vehicula sed odio. Phasellus in enim venenatis, iaculis tortor eu, bibendum ante. Donec
25+
ac tellus dictum neque volutpat blandit. Praesent efficitur faucibus risus, ac auctor
26+
purus porttitor vitae. Phasellus ornare dui nec orci posuere, nec luctus mauris
27+
semper.</p>
28+
<p>Morbi viverra, ante vel aliquet tincidunt, leo dolor pharetra quam, at semper massa
29+
orci nec magna. Donec posuere nec sapien sed laoreet. Etiam cursus nunc in condimentum
30+
facilisis. Etiam in tempor tortor. Vivamus faucibus egestas enim, at convallis diam
31+
pulvinar vel. Cras ac orci eget nisi maximus cursus. Nunc urna libero, viverra sit amet
32+
nisl at, hendrerit tempor turpis. Maecenas facilisis convallis mi vel tempor. Nullam
33+
vitae nunc leo. Cras sed nisl consectetur, rhoncus sapien sit amet, tempus sapien.</p>
34+
<p>Integer turpis erat, porttitor vitae mi faucibus, laoreet interdum tellus. Curabitur
35+
posuere molestie dictum. Morbi eget congue risus, quis rhoncus quam. Suspendisse vitae
36+
hendrerit erat, at posuere mi. Cras eu fermentum nunc. Sed id ante eu orci commodo
37+
volutpat non ac est. Praesent ligula diam, congue eu enim scelerisque, finibus commodo
38+
lectus.</p>
1639
</md-content>
1740
</md-tab>
1841
<md-tab label="three">
1942
<md-content class="md-padding">
2043
<h1 class="md-display-2">Tab Three</h1>
21-
<p>Integer turpis erat, porttitor vitae mi faucibus, laoreet interdum tellus. Curabitur posuere molestie dictum. Morbi eget congue risus, quis rhoncus quam. Suspendisse vitae hendrerit erat, at posuere mi. Cras eu fermentum nunc. Sed id ante eu orci commodo volutpat non ac est. Praesent ligula diam, congue eu enim scelerisque, finibus commodo lectus.</p>
44+
<p>Integer turpis erat, porttitor vitae mi faucibus, laoreet interdum tellus. Curabitur
45+
posuere molestie dictum. Morbi eget congue risus, quis rhoncus quam. Suspendisse vitae
46+
hendrerit erat, at posuere mi. Cras eu fermentum nunc. Sed id ante eu orci commodo
47+
volutpat non ac est. Praesent ligula diam, congue eu enim scelerisque, finibus commodo
48+
lectus.</p>
2249
</md-content>
2350
</md-tab>
2451
</md-tabs>

src/components/tabs/demoDynamicTabs/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div ng-controller="AppCtrl" class="sample" layout="column" ng-cloak>
1+
<div ng-controller="AppCtrl" layout="column" ng-cloak>
22
<md-content class="md-padding">
33
<md-tabs md-selected="selectedIndex" md-border-bottom md-autoselect md-swipe-content>
44
<md-tab ng-repeat="tab in tabs"

src/components/tabs/demoDynamicTabs/script.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
$scope.$watch('selectedIndex', function(current, old) {
3636
previous = selected;
3737
selected = tabs[current];
38-
if (old + 1 && (old != current)) {
38+
if (old + 1 && (old !== current)) {
3939
$log.debug('Goodbye ' + previous.title + '!');
4040
}
4141
if (current + 1) {

src/components/tabs/js/tabsController.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -219,15 +219,15 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
219219

220220
/**
221221
* Add/remove the `md-no-tab-content` class depending on `ctrl.hasContent`
222-
* @param hasContent
222+
* @param {boolean} hasContent
223223
*/
224224
function handleHasContent (hasContent) {
225225
$element[ hasContent ? 'removeClass' : 'addClass' ]('md-no-tab-content');
226226
}
227227

228228
/**
229229
* Apply ctrl.offsetLeft to the paging element when it changes
230-
* @param left
230+
* @param {string|number} left
231231
*/
232232
function handleOffsetChange (left) {
233233
var elements = getElements();
@@ -242,8 +242,8 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
242242

243243
/**
244244
* Update the UI whenever `ctrl.focusIndex` is updated
245-
* @param newIndex
246-
* @param oldIndex
245+
* @param {number} newIndex
246+
* @param {number} oldIndex
247247
*/
248248
function handleFocusIndexChange (newIndex, oldIndex) {
249249
if (newIndex === oldIndex) return;
@@ -552,25 +552,33 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
552552

553553
/**
554554
* Determines if the tabs should appear centered.
555-
* @returns {string|boolean}
555+
* @returns {boolean}
556556
*/
557557
function shouldCenterTabs () {
558558
return ctrl.centerTabs && !ctrl.shouldPaginate;
559559
}
560560

561561
/**
562562
* Determines if pagination is necessary to display the tabs within the available space.
563-
* @returns {boolean}
563+
* @returns {boolean} true if pagination is necessary, false otherwise
564564
*/
565565
function shouldPaginate () {
566+
var shouldPaginate;
566567
if (ctrl.noPagination || !loaded) return false;
567568
var canvasWidth = $element.prop('clientWidth');
568569

569570
angular.forEach(getElements().tabs, function (tab) {
570571
canvasWidth -= tab.offsetWidth;
571572
});
572573

573-
return canvasWidth < 0;
574+
shouldPaginate = canvasWidth < 0;
575+
// Work around width calculation issues on IE11 when pagination is enabled
576+
if (shouldPaginate) {
577+
getElements().paging.style.width = '999999px';
578+
} else {
579+
getElements().paging.style.width = undefined;
580+
}
581+
return shouldPaginate;
574582
}
575583

576584
/**

src/components/tabs/js/tabsDirective.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
* contents of the selected tab.
7777
* @param {boolean=} md-border-bottom If present, shows a solid `1px` border between the tabs and
7878
* their content.
79-
* @param {boolean=} md-center-tabs When enabled, tabs will be centered provided there is no need
79+
* @param {boolean=} md-center-tabs If defined, tabs will be centered provided there is no need
8080
* for pagination.
8181
* @param {boolean=} md-no-pagination When enabled, pagination will remain off.
8282
* @param {boolean=} md-swipe-content When enabled, swipe gestures will be enabled for the content

src/components/tabs/tabs.scss

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ md-pagination-wrapper {
166166
display: flex;
167167
transition: transform $swift-ease-in-out-duration $swift-ease-in-out-timing-function;
168168
position: absolute;
169-
width: 999999px;
170169
@include rtl-prop(left, right, 0, auto);
171170
transform: translate(0, 0);
172171
&.md-center-tabs {

0 commit comments

Comments
 (0)