1- import { Directive } from 'angular2/annotations' ;
1+ import { Directive , onCheck } from 'angular2/annotations' ;
22import { ElementRef } from 'angular2/core' ;
3-
3+ import { PipeRegistry } from 'angular2/src/change_detection/pipes/pipe_registry' ;
44import { isPresent } from 'angular2/src/facade/lang' ;
55import { DOM } from 'angular2/src/dom/dom_adapter' ;
66
7- @Directive ( { selector : '[class]' , properties : [ 'iterableChanges : class | keyValDiff ' ] } )
7+ @Directive ( { selector : '[class]' , lifecycle : [ onCheck ] , properties : [ 'rawClass : class' ] } )
88export class CSSClass {
99 _domEl ;
10- constructor ( ngEl : ElementRef ) { this . _domEl = ngEl . domElement ; }
10+ _pipe ;
11+ _prevRawClass ;
12+ rawClass ;
13+ constructor ( private _pipeRegistry : PipeRegistry , ngEl : ElementRef ) {
14+ this . _domEl = ngEl . domElement ;
15+ }
1116
1217 _toggleClass ( className , enabled ) : void {
1318 if ( enabled ) {
@@ -17,12 +22,20 @@ export class CSSClass {
1722 }
1823 }
1924
20- set iterableChanges ( changes ) {
21- if ( isPresent ( changes ) ) {
22- changes . forEachAddedItem ( ( record ) => { this . _toggleClass ( record . key , record . currentValue ) ; } ) ;
23- changes . forEachChangedItem (
25+ onCheck ( ) {
26+ if ( this . rawClass != this . _prevRawClass ) {
27+ this . _prevRawClass = this . rawClass ;
28+ this . _pipe = isPresent ( this . rawClass ) ?
29+ this . _pipeRegistry . get ( 'keyValDiff' , this . rawClass , null ) :
30+ null ;
31+ }
32+
33+ if ( isPresent ( this . _pipe ) && this . _pipe . check ( this . rawClass ) ) {
34+ this . _pipe . forEachAddedItem (
35+ ( record ) => { this . _toggleClass ( record . key , record . currentValue ) ; } ) ;
36+ this . _pipe . forEachChangedItem (
2437 ( record ) => { this . _toggleClass ( record . key , record . currentValue ) ; } ) ;
25- changes . forEachRemovedItem ( ( record ) => {
38+ this . _pipe . forEachRemovedItem ( ( record ) => {
2639 if ( record . previousValue ) {
2740 DOM . removeClass ( this . _domEl , record . key ) ;
2841 }
0 commit comments