@@ -104,7 +104,7 @@ function $StateRefDirective($state, $timeout) {
104104
105105        var  activeDirective  =  uiSrefActive [ 1 ]  ||  uiSrefActive [ 0 ] ; 
106106        if  ( activeDirective )  { 
107-           activeDirective . $$setStateInfo  ( ref . state ,  params ) ; 
107+           activeDirective . $$addStateInfo  ( ref . state ,  params ) ; 
108108        } 
109109        if  ( newHref  ===  null )  { 
110110          nav  =  false ; 
@@ -223,30 +223,50 @@ function $StateRefActiveDirective($state, $stateParams, $interpolate) {
223223  return   { 
224224    restrict : "A" , 
225225    controller : [ '$scope' ,  '$element' ,  '$attrs' ,  function  ( $scope ,  $element ,  $attrs )  { 
226-       var  state ,   params ,  activeClass ; 
226+       var  states   =   [ ] ,  activeClass ; 
227227
228228      // There probably isn't much point in $observing this 
229229      // uiSrefActive and uiSrefActiveEq share the same directive object with some 
230230      // slight difference in logic routing 
231231      activeClass  =  $interpolate ( $attrs . uiSrefActiveEq  ||  $attrs . uiSrefActive  ||  '' ,  false ) ( $scope ) ; 
232232
233233      // Allow uiSref to communicate with uiSrefActive[Equals] 
234-       this . $$setStateInfo  =  function ( newState ,  newParams )  { 
235-         state  =  $state . get ( newState ,  stateContext ( $element )  ||  $state . $current ) ; 
236-         params  =  newParams ; 
237-         update ( ) ; 
234+       this . $$addStateInfo  =  function  ( newState ,  newParams )  { 
235+         var  state  =  $state . get ( newState ,  stateContext ( $element ) ) ; 
236+         if  ( state )  { 
237+           states . push ( { 
238+             state : state , 
239+             params : newParams 
240+           } ) ; 
241+           update ( ) ; 
242+         } 
238243      } ; 
239244
240245      $scope . $on ( '$stateChangeSuccess' ,  update ) ; 
241246
242247      // Update route state 
243248      function  update ( )  { 
244-         $element [ ( isMatch ( )  ? "add"  : "remove" )  +  "Class" ] ( activeClass ) ; 
249+         if  ( anyMatch ( ) )  { 
250+           $element . addClass ( activeClass ) ; 
251+         }  else  { 
252+           $element . removeClass ( activeClass ) ; 
253+         } 
254+       } 
255+ 
256+       function  anyMatch ( )  { 
257+         for  ( var  i  =  0 ;  i  <  states . length ;  i ++ )  { 
258+           if  ( isMatch ( states [ i ] . state ,  states [ i ] . params ) )  { 
259+             return  true ; 
260+           } 
261+         } 
262+         return  false ; 
245263      } 
246264
247-       function  isMatch ( )  { 
265+       function  isMatch ( state ,   params )  { 
248266        if  ( typeof  $attrs . uiSrefActiveEq  !==  'undefined' )  { 
249-           return  $state . $current . self  ===  state  &&  matchesParams ( ) ; 
267+           return  $state . is ( state . name ,  params ) ; 
268+         }  else  { 
269+           return  $state . includes ( state . name ,  params ) ; 
250270        } 
251271        return  $state . includes ( state . name )  &&  matchesParams ( ) ; 
252272      } 
0 commit comments