forked from angular/angular.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathresponsive-menu.js
More file actions
55 lines (50 loc) · 1.55 KB
/
responsive-menu.js
File metadata and controls
55 lines (50 loc) · 1.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
angular.
module('responsiveMenu', ['ngMaterial', 'ViewUtils']).
directive('responsiveMenu', responsiveMenuDirective);
responsiveMenuDirective.$inject = ['$mdBottomSheet', 'ViewUtils'];
function responsiveMenuDirective($mdBottomSheet, ViewUtils) {
// TODO: Create showFns for various sizes (not necessarily all)
var showFns = {
// 'gt-lg': '',
// 'lg': '',
// 'md': '',
'sm': function showSmFn(items) {
$mdBottomSheet.show({
template: _getResponsiveMenuSmTemplate(),
controller: ['$mdBottomSheet', '$scope',
function ResponsiveMenuSmController($mdBottomSheet, $scope) {
$scope.items = items;
$scope.onItemClick = $mdBottomSheet.hide.bind($mdBottomSheet);
}
]
});
}
};
var defaultShowFn = showFns.sm;
return {
restrict: 'A',
scope: {
items: '=rmItems'
},
controller: ['$element', '$scope', function ResponsiveMenuController($element, $scope) {
$element.on('click', onClick.bind(this));
function onClick(evt) {
var showFn = ViewUtils.getValueForSize(showFns, defaultShowFn);
showFn($scope.items);
}
}]
};
}
function _getResponsiveMenuSmTemplate() {
return [
'<md-bottom-sheet>',
' <md-list>',
' <md-item ng-repeat="item in items">',
' <md-button aria-label="{{item.label}}" ng-click="onItemClick(item)">',
' <a ng-href="{{item.url}}">{{item.label}}</a>',
' </md-button>',
' </md-item>',
' </md-list>',
'</md-bottom-sheet>',
''].join('\n');
}