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

Commit 5034a04

Browse files
SplaktarThomasBurleson
authored andcommitted
fix(tabs): fix tab paging and sizing on IE11 when tabs are in a dialog
`elements.dummies` is not always valid on IE11. It often throws `Invalid calling object`. The fix is to call `getElements()` to do a fresh look up of the selectors each time. Only doing the `getElements()` call when the exception is throw was tried. It resulted in improperly loading/sizing of tabs on small screen sizes. Fixes #3953. Closes #5096.
1 parent 441cbf1 commit 5034a04

File tree

4 files changed

+76
-9
lines changed

4 files changed

+76
-9
lines changed

src/components/dialog/demoBasicUsage/index.html

+7-5
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,19 @@
44
send focus back to the triggering button.
55
</p>
66

7-
<div class="dialog-demo-content" layout="row" layout-wrap >
8-
<md-button class="md-primary md-raised" ng-click="showAlert($event)" flex flex-md="100">
7+
<div class="dialog-demo-content" layout="row" layout-wrap layout-margin>
8+
<md-button class="md-primary md-raised" ng-click="showAlert($event)" flex-sm="100" flex-md="100" flex-gt-md="auto">
99
Alert Dialog
1010
</md-button>
11-
<md-button class="md-primary md-raised" ng-click="showConfirm($event)" flex flex-md="100">
11+
<md-button class="md-primary md-raised" ng-click="showConfirm($event)" flex-sm="100" flex-md="100" flex-gt-md="auto">
1212
Confirm Dialog
1313
</md-button>
14-
<md-button class="md-primary md-raised" ng-click="showAdvanced($event)" flex flex-md="100">
14+
<md-button class="md-primary md-raised" ng-click="showAdvanced($event)" flex-sm="100" flex-md="100" flex-gt-md="auto">
1515
Custom Dialog
1616
</md-button>
17+
<md-button class="md-primary md-raised" ng-click="showTabDialog($event)" flex-sm="100" flex-md="100" flex-gt-md="auto">
18+
Tab Dialog
19+
</md-button>
1720
</div>
1821

1922
<p class="footer">Note: The <b>Confirm</b> dialog does not use <code>$mdDialog.clickOutsideToClose(true)</code>.</p>
@@ -25,5 +28,4 @@
2528
</b>
2629
</div>
2730

28-
2931
</div>

src/components/dialog/demoBasicUsage/script.js

+15
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,21 @@ angular.module('dialogDemo1', ['ngMaterial'])
5050
$scope.status = 'You cancelled the dialog.';
5151
});
5252
};
53+
54+
$scope.showTabDialog = function(ev) {
55+
$mdDialog.show({
56+
controller: DialogController,
57+
templateUrl: 'tabDialog.tmpl.html',
58+
parent: angular.element(document.body),
59+
targetEvent: ev,
60+
clickOutsideToClose:true
61+
})
62+
.then(function(answer) {
63+
$scope.status = 'You said the information was "' + answer + '".';
64+
}, function() {
65+
$scope.status = 'You cancelled the dialog.';
66+
});
67+
};
5368
});
5469

5570
function DialogController($scope, $mdDialog) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<md-dialog aria-label="Mango (Fruit)">
2+
<form>
3+
<md-toolbar>
4+
<div class="md-toolbar-tools">
5+
<h2>Mango (Fruit)</h2>
6+
<span flex></span>
7+
<md-button class="md-icon-button" ng-click="cancel()">
8+
<md-icon md-svg-src="img/icons/ic_close_24px.svg" aria-label="Close dialog"></md-icon>
9+
</md-button>
10+
</div>
11+
</md-toolbar>
12+
<md-dialog-content style="max-width:800px;max-height:810px; ">
13+
<md-tabs md-dynamic-height md-border-bottom>
14+
<md-tab label="one">
15+
<md-content class="md-padding">
16+
<h1 class="md-display-2">Tab One</h1>
17+
<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>
18+
</md-content>
19+
</md-tab>
20+
<md-tab label="two">
21+
<md-content class="md-padding">
22+
<h1 class="md-display-2">Tab Two</h1>
23+
<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>
24+
<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>
25+
<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>
26+
</md-content>
27+
</md-tab>
28+
<md-tab label="three">
29+
<md-content class="md-padding">
30+
<h1 class="md-display-2">Tab Three</h1>
31+
<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>
32+
</md-content>
33+
</md-tab>
34+
</md-tabs>
35+
</md-dialog-content>
36+
37+
<div class="md-actions" layout="row">
38+
<md-button href="http://en.wikipedia.org/wiki/Mango" target="_blank" md-autofocus>
39+
More on Wikipedia
40+
</md-button>
41+
<span flex></span>
42+
<md-button ng-click="answer('not useful')" >
43+
Not Useful
44+
</md-button>
45+
<md-button ng-click="answer('useful')" style="margin-right:20px;" >
46+
Useful
47+
</md-button>
48+
</div>
49+
</form>
50+
</md-dialog>

src/components/tabs/js/tabsController.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
487487
function shouldPaginate () {
488488
if (ctrl.noPagination || !loaded) return false;
489489
var canvasWidth = $element.prop('clientWidth');
490-
angular.forEach(elements.dummies, function (tab) { canvasWidth -= tab.offsetWidth; });
490+
angular.forEach(getElements().dummies, function (tab) { canvasWidth -= tab.offsetWidth; });
491491
return canvasWidth < 0;
492492
}
493493

@@ -541,7 +541,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
541541

542542
function updatePagingWidth() {
543543
var width = 1;
544-
angular.forEach(elements.dummies, function (element) { width += element.offsetWidth; });
544+
angular.forEach(getElements().dummies, function (element) { width += element.offsetWidth; });
545545
angular.element(elements.paging).css('width', width + 'px');
546546
}
547547

@@ -580,11 +580,11 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
580580
}
581581

582582
/**
583-
* This is used to forward focus to dummy elements. This method is necessary to avoid aniation
583+
* This is used to forward focus to dummy elements. This method is necessary to avoid animation
584584
* issues when attempting to focus an item that is out of view.
585585
*/
586586
function redirectFocus () {
587-
elements.dummies[ ctrl.focusIndex ].focus();
587+
getElements().dummies[ ctrl.focusIndex ].focus();
588588
}
589589

590590
/**

0 commit comments

Comments
 (0)