You may supply a direction of left
, up
, down
, or
@@ -21,7 +21,7 @@
-
+
diff --git a/src/components/fabSpeedDial/demoBasicUsage/script.js b/src/components/fabSpeedDial/demoBasicUsage/script.js
index fc45d80b85c..516392c1788 100644
--- a/src/components/fabSpeedDial/demoBasicUsage/script.js
+++ b/src/components/fabSpeedDial/demoBasicUsage/script.js
@@ -2,18 +2,16 @@
'use strict';
angular.module('fabSpeedDialBasicUsageDemo', ['ngMaterial'])
- .controller('AppCtrl', function($scope) {
- $scope.demo = {
- topDirections: ['left', 'up'],
- bottomDirections: ['down', 'right'],
+ .controller('DemoCtrl', function() {
+ this.topDirections = ['left', 'up'];
+ this.bottomDirections = ['down', 'right'];
- isOpen: false,
+ this.isOpen = false;
- availableModes: ['md-fling', 'md-scale'],
- selectedMode: 'md-fling',
+ this.availableModes = ['md-fling', 'md-scale'];
+ this.selectedMode = 'md-fling';
- availableDirections: ['up', 'down', 'left', 'right'],
- selectedDirection: 'up'
- };
+ this.availableDirections = ['up', 'down', 'left', 'right'];
+ this.selectedDirection = 'up';
});
})();
diff --git a/src/components/fabSpeedDial/demoModal/index.html b/src/components/fabSpeedDial/demoModal/index.html
new file mode 100644
index 00000000000..76d8a98ae7b
--- /dev/null
+++ b/src/components/fabSpeedDial/demoModal/index.html
@@ -0,0 +1,42 @@
+
+
+
+ You can also use the buttons to open a dialog.
+
+
+
+
+
+
+ Menu
+
+
+
+
+
+
+ Open dialog
+
+
+
+
+
+
+
+
+
diff --git a/src/components/fabSpeedDial/demoModal/script.js b/src/components/fabSpeedDial/demoModal/script.js
new file mode 100644
index 00000000000..b3da36b86ff
--- /dev/null
+++ b/src/components/fabSpeedDial/demoModal/script.js
@@ -0,0 +1,23 @@
+(function() {
+ 'use strict';
+
+ angular.module('fabSpeedDialModalDemo', ['ngMaterial'])
+ .controller('DemoCtrl', function($mdDialog) {
+ this.openDialog = function($event) {
+ $mdDialog.show({
+ clickOutsideToClose: true,
+ controller: function($mdDialog) {
+ this.close = function() {
+ $mdDialog.cancel();
+ };
+ this.submit = function() {
+ $mdDialog.hide();
+ };
+ },
+ controllerAs: 'dialog',
+ templateUrl: 'dialog.html',
+ targetEvent: $event
+ });
+ }
+ });
+})();
diff --git a/src/components/fabSpeedDial/demoModal/style.scss b/src/components/fabSpeedDial/demoModal/style.scss
new file mode 100644
index 00000000000..b6790ce5dbf
--- /dev/null
+++ b/src/components/fabSpeedDial/demoModal/style.scss
@@ -0,0 +1,18 @@
+.md-fab.demo-fab.trigger-fab, .md-fab.demo-fab.action-fab {
+ &:hover, &.md-focused {
+ background-color: #333;
+ }
+}
+
+.md-fab.demo-fab.action-fab {
+ background-color: #aaa;
+}
+
+.lock-size {
+ min-width: 300px;
+ min-height: 300px;
+ width: 300px;
+ height: 300px;
+ margin-left: auto;
+ margin-right: auto;
+}
\ No newline at end of file
diff --git a/src/components/fabSpeedDial/demoTooltips/index.html b/src/components/fabSpeedDial/demoTooltips/index.html
new file mode 100644
index 00000000000..83242720275
--- /dev/null
+++ b/src/components/fabSpeedDial/demoTooltips/index.html
@@ -0,0 +1,35 @@
+
+
+
+ You may add tooltips to both the trigger and actions.
+
+
+
+
+
+
+ Menu
+
+
+
+
+
+
+ Twitter
+
+
+
+
+ Facebook
+
+
+
+
+ Google Hangout
+
+
+
+
+
+
+
diff --git a/src/components/fabSpeedDial/demoTooltips/script.js b/src/components/fabSpeedDial/demoTooltips/script.js
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/components/fabSpeedDial/demoTooltips/style.scss b/src/components/fabSpeedDial/demoTooltips/style.scss
new file mode 100644
index 00000000000..b7bdd49aa1d
--- /dev/null
+++ b/src/components/fabSpeedDial/demoTooltips/style.scss
@@ -0,0 +1,20 @@
+.text-capitalize {
+ text-transform: capitalize;
+}
+
+.md-fab:hover, .md-fab.md-focused {
+ background-color: #000 !important;
+}
+
+p.note {
+ font-size: 1.2rem;
+}
+
+.lock-size {
+ min-width: 300px;
+ min-height: 300px;
+ width: 300px;
+ height: 300px;
+ margin-left: auto;
+ margin-right: auto;
+}
\ No newline at end of file
diff --git a/src/components/fabSpeedDial/fabSpeedDial.js b/src/components/fabSpeedDial/fabSpeedDial.js
index 47fc2ac47fa..61c4751e152 100644
--- a/src/components/fabSpeedDial/fabSpeedDial.js
+++ b/src/components/fabSpeedDial/fabSpeedDial.js
@@ -79,11 +79,24 @@
// Define our open/close functions
// Note: Used by fabTrigger and fabActions directives
vm.open = function() {
- $scope.$apply('vm.isOpen = true');
+ // Async eval to avoid conflicts with existing digest loops
+ $scope.$evalAsync("vm.isOpen = true");
};
vm.close = function() {
- $scope.$apply('vm.isOpen = false');
+ // Async eval to avoid conflicts with existing digest loops
+ // Only close if we do not currently have mouse focus (since child elements can call this)
+ !vm.moused && $scope.$evalAsync("vm.isOpen = false");
+ };
+
+ vm.mouseenter = function() {
+ vm.moused = true;
+ vm.open();
+ };
+
+ vm.mouseleave = function() {
+ vm.moused = false;
+ vm.close();
};
setupDefaults();
@@ -101,8 +114,8 @@
// Setup our event listeners
function setupListeners() {
- $element.on('mouseenter', vm.open);
- $element.on('mouseleave', vm.close);
+ $element.on('mouseenter', vm.mouseenter);
+ $element.on('mouseleave', vm.mouseleave);
}
// Setup our watchers
@@ -142,18 +155,19 @@
angular.forEach(items, function(item, index) {
var styles = item.style;
- styles.transform = '';
+ styles.transform = styles.webkitTransform = '';
styles.transitionDelay = '';
styles.opacity = 1;
// Make the items closest to the trigger have the highest z-index
- item.style.zIndex = (items.length - index) + startZIndex;
+ styles.zIndex = (items.length - index) + startZIndex;
});
// If the control is closed, hide the items behind the trigger
if (!ctrl.isOpen) {
angular.forEach(items, function(item, index) {
var newPosition, axis;
+ var styles = item.style;
switch (ctrl.direction) {
case 'up':
@@ -174,7 +188,9 @@
break;
}
- item.style.transform = 'translate' + axis + '(' + newPosition + 'px)';
+ var newTranslate = 'translate' + axis + '(' + newPosition + 'px)';
+
+ styles.transform = styles.webkitTransform = newTranslate;
});
}
}
@@ -205,7 +221,7 @@
offsetDelay = index * delay;
styles.opacity = ctrl.isOpen ? 1 : 0;
- styles.transform = ctrl.isOpen ? 'scale(1)' : 'scale(0)';
+ styles.transform = styles.webkitTransform = ctrl.isOpen ? 'scale(1)' : 'scale(0)';
styles.transitionDelay = (ctrl.isOpen ? offsetDelay : (items.length - offsetDelay)) + 'ms';
});
}
diff --git a/src/components/fabSpeedDial/fabSpeedDial.scss b/src/components/fabSpeedDial/fabSpeedDial.scss
index a7507002906..d234eb0ef6a 100644
--- a/src/components/fabSpeedDial/fabSpeedDial.scss
+++ b/src/components/fabSpeedDial/fabSpeedDial.scss
@@ -17,7 +17,7 @@ md-fab-speed-dial {
display: flex;
// Set the height so that the z-index in the JS animation works
- height: 100%;
+ height: initial;
.md-fab-action-item {
visibility: hidden;
diff --git a/src/components/fabSpeedDial/fabSpeedDial.spec.js b/src/components/fabSpeedDial/fabSpeedDial.spec.js
index 27cf8058542..3545a5cd9ff 100644
--- a/src/components/fabSpeedDial/fabSpeedDial.spec.js
+++ b/src/components/fabSpeedDial/fabSpeedDial.spec.js
@@ -38,6 +38,7 @@ describe(' directive', function() {
);
element.find('button').triggerHandler('focus');
+ pageScope.$digest();
expect(controller.isOpen).toBe(true);
}));
@@ -47,6 +48,7 @@ describe(' directive', function() {
);
element.find('button').triggerHandler('focus');
+ pageScope.$digest();
expect(controller.isOpen).toBe(true);
}));
@@ -56,9 +58,11 @@ describe(' directive', function() {
);
element.find('button').triggerHandler('focus');
+ pageScope.$digest();
expect(controller.isOpen).toBe(true);
element.find('button').triggerHandler('blur');
+ pageScope.$digest();
expect(controller.isOpen).toBe(false);
}));