10
10
</li>
11
11
</ul>
12
12
*/
13
- angular . module ( 'mm.foundation.dropdownToggle' , [ 'mm.foundation.position' ] )
13
+ angular . module ( 'mm.foundation.dropdownToggle' , [ 'mm.foundation.position' , 'mm.foundation.mediaQueries' ] )
14
14
15
- . directive ( 'dropdownToggle' , [ '$document' , '$location' , '$position' , function ( $document , $location , $position ) {
15
+ . controller ( 'DropdownToggleController' , [ '$scope' , '$attrs' , 'mediaQueries' , function ( $scope , $attrs , mediaQueries ) {
16
+ this . small = function ( ) {
17
+ return mediaQueries . small ( ) && ! mediaQueries . medium ( ) ;
18
+ } ;
19
+ } ] )
20
+
21
+ . directive ( 'dropdownToggle' , [ '$document' , '$window' , '$location' , '$position' , function ( $document , $window , $location , $position ) {
16
22
var openElement = null ,
17
23
closeMenu = angular . noop ;
18
24
return {
19
25
restrict : 'CA' ,
20
26
scope : {
21
27
dropdownToggle : '@'
22
28
} ,
23
- link : function ( scope , element , attrs ) {
29
+ controller : 'DropdownToggleController' ,
30
+ link : function ( scope , element , attrs , controller ) {
24
31
var dropdown = angular . element ( $document [ 0 ] . querySelector ( scope . dropdownToggle ) ) ;
25
32
26
33
scope . $watch ( '$location.path' , function ( ) { closeMenu ( ) ; } ) ;
@@ -41,10 +48,31 @@ angular.module('mm.foundation.dropdownToggle', [ 'mm.foundation.position' ])
41
48
var offset = $position . offset ( element ) ;
42
49
var parentOffset = $position . offset ( angular . element ( dropdown [ 0 ] . offsetParent ) ) ;
43
50
44
- dropdown . css ( {
45
- left : offset . left - parentOffset . left + 'px' ,
46
- top : offset . top - parentOffset . top + offset . height + 'px'
47
- } ) ;
51
+ var dropdownWidth = dropdown . prop ( 'offsetWidth' ) ;
52
+
53
+ var css = {
54
+ top : offset . top - parentOffset . top + offset . height + 'px'
55
+ } ;
56
+
57
+ if ( controller . small ( ) ) {
58
+ css . left = Math . max ( ( parentOffset . width - dropdownWidth ) / 2 , 8 ) + 'px' ;
59
+ css . position = 'absolute' ;
60
+ css . width = '95%' ;
61
+ css [ 'max-width' ] = 'none' ;
62
+ }
63
+ else {
64
+ var left = Math . round ( offset . left - parentOffset . left ) ;
65
+ var rightThreshold = $window . innerWidth - dropdownWidth - 8 ;
66
+ if ( left > rightThreshold ) {
67
+ left = rightThreshold ;
68
+ dropdown . removeClass ( 'left' ) . addClass ( 'right' ) ;
69
+ }
70
+ css . left = left + 'px' ;
71
+ css . position = null ;
72
+ css [ 'max-width' ] = null ;
73
+ }
74
+
75
+ dropdown . css ( css ) ;
48
76
49
77
openElement = element ;
50
78
closeMenu = function ( event ) {
0 commit comments