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