@@ -770,6 +770,55 @@ function $CompileProvider($provide) {
770
770
linkFn ,
771
771
directiveValue ;
772
772
773
+ for ( var i = 0 , ii = directives . length ; i < ii ; i ++ ) {
774
+ directive = directives [ i ] ;
775
+ if ( terminalPriority > directive . priority ) {
776
+ break ; // prevent further processing of directives
777
+ }
778
+
779
+ directiveName = directive . name ;
780
+
781
+ if ( directiveValue = directive . scope ) {
782
+ assertNoDuplicate ( 'new/isolated scope' , newIsolateScopeDirective , directive , $compileNode ) ;
783
+
784
+ // skip the check for directives with async templates, we'll check the derived sync directive when
785
+ // the template arrives
786
+ if ( ! directive . templateUrl && isObject ( directiveValue ) ) {
787
+ newIsolateScopeDirective = directive ;
788
+ }
789
+ }
790
+
791
+ if ( ! directive . templateUrl && directive . controller ) {
792
+ directiveValue = directive . controller ;
793
+ controllerDirectives = controllerDirectives || { } ;
794
+ assertNoDuplicate ( "'" + directiveName + "' controller" ,
795
+ controllerDirectives [ directiveName ] , directive , $compileNode ) ;
796
+ controllerDirectives [ directiveName ] = directive ;
797
+ }
798
+
799
+ if ( directiveValue = directive . transclude ) {
800
+ terminalPriority = directive . priority ;
801
+ assertNoDuplicate ( 'transclusion' , transcludeDirective , directive , $compileNode ) ;
802
+ transcludeDirective = directive ;
803
+ }
804
+
805
+ if ( directive . template ) {
806
+ assertNoDuplicate ( 'template' , templateDirective , directive , $compileNode ) ;
807
+ templateDirective = directive ;
808
+ }
809
+
810
+ if ( directive . templateUrl ) {
811
+ assertNoDuplicate ( 'template' , templateDirective , directive , $compileNode ) ;
812
+ templateDirective = directive ;
813
+ }
814
+
815
+ if ( directive . terminal ) {
816
+ terminalPriority = Math . max ( terminalPriority , directive . priority ) ;
817
+ }
818
+ }
819
+
820
+ terminalPriority = - Number . MAX_VALUE ;
821
+
773
822
// executes all directives on the current element
774
823
for ( var i = 0 , ii = directives . length ; i < ii ; i ++ ) {
775
824
directive = directives [ i ] ;
@@ -789,31 +838,17 @@ function $CompileProvider($provide) {
789
838
if ( directiveValue = directive . scope ) {
790
839
newScopeDirective = newScopeDirective || directive ;
791
840
792
- // skip the check for directives with async templates, we'll check the derived sync directive when
793
- // the template arrives
794
841
if ( ! directive . templateUrl ) {
795
- assertNoDuplicate ( 'new/isolated scope' , newIsolateScopeDirective , directive , $compileNode ) ;
796
842
if ( isObject ( directiveValue ) ) {
797
843
safeAddClass ( $compileNode , 'ng-isolate-scope' ) ;
798
- newIsolateScopeDirective = directive ;
799
844
}
800
845
safeAddClass ( $compileNode , 'ng-scope' ) ;
801
846
}
802
847
}
803
848
804
849
directiveName = directive . name ;
805
850
806
- if ( ! directive . templateUrl && directive . controller ) {
807
- directiveValue = directive . controller ;
808
- controllerDirectives = controllerDirectives || { } ;
809
- assertNoDuplicate ( "'" + directiveName + "' controller" ,
810
- controllerDirectives [ directiveName ] , directive , $compileNode ) ;
811
- controllerDirectives [ directiveName ] = directive ;
812
- }
813
-
814
851
if ( directiveValue = directive . transclude ) {
815
- assertNoDuplicate ( 'transclusion' , transcludeDirective , directive , $compileNode ) ;
816
- transcludeDirective = directive ;
817
852
terminalPriority = directive . priority ;
818
853
if ( directiveValue == 'element' ) {
819
854
$template = groupScan ( compileNode , attrStart , attrEnd )
@@ -832,9 +867,6 @@ function $CompileProvider($provide) {
832
867
}
833
868
834
869
if ( directive . template ) {
835
- assertNoDuplicate ( 'template' , templateDirective , directive , $compileNode ) ;
836
- templateDirective = directive ;
837
-
838
870
directiveValue = ( isFunction ( directive . template ) )
839
871
? directive . template ( $compileNode , templateAttrs )
840
872
: directive . template ;
@@ -843,6 +875,7 @@ function $CompileProvider($provide) {
843
875
844
876
if ( directive . replace ) {
845
877
replaceDirective = directive ;
878
+
846
879
$template = jqLite ( '<div>' +
847
880
trim ( directiveValue ) +
848
881
'</div>' ) . contents ( ) ;
@@ -877,9 +910,6 @@ function $CompileProvider($provide) {
877
910
}
878
911
879
912
if ( directive . templateUrl ) {
880
- assertNoDuplicate ( 'template' , templateDirective , directive , $compileNode ) ;
881
- templateDirective = directive ;
882
-
883
913
if ( directive . replace ) {
884
914
replaceDirective = directive ;
885
915
}
@@ -904,7 +934,6 @@ function $CompileProvider($provide) {
904
934
nodeLinkFn . terminal = true ;
905
935
terminalPriority = Math . max ( terminalPriority , directive . priority ) ;
906
936
}
907
-
908
937
}
909
938
910
939
nodeLinkFn . scope = newScopeDirective && newScopeDirective . scope ;
0 commit comments