* Once the directives have been collected, their compile functions are executed. This method * is responsible for inlining directive templates as well as terminating the application * of the directives if the terminal directive has been reached. * * @param {Array} directives Arra
(directives, compileNode, templateAttrs, transcludeFn, jqCollection)
| 4115 | * @returns linkFn |
| 4116 | */ |
| 4117 | function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, jqCollection) { |
| 4118 | var terminalPriority = -Number.MAX_VALUE, |
| 4119 | preLinkFns = [], |
| 4120 | postLinkFns = [], |
| 4121 | newScopeDirective = null, |
| 4122 | newIsolateScopeDirective = null, |
| 4123 | templateDirective = null, |
| 4124 | $compileNode = templateAttrs.$$element = jqLite(compileNode), |
| 4125 | directive, |
| 4126 | directiveName, |
| 4127 | $template, |
| 4128 | transcludeDirective, |
| 4129 | childTranscludeFn = transcludeFn, |
| 4130 | controllerDirectives, |
| 4131 | linkFn, |
| 4132 | directiveValue; |
| 4133 | |
| 4134 | // executes all directives on the current element |
| 4135 | for(var i = 0, ii = directives.length; i < ii; i++) { |
| 4136 | directive = directives[i]; |
| 4137 | $template = undefined; |
| 4138 | |
| 4139 | if (terminalPriority > directive.priority) { |
| 4140 | break; // prevent further processing of directives |
| 4141 | } |
| 4142 | |
| 4143 | if (directiveValue = directive.scope) { |
| 4144 | assertNoDuplicate('isolated scope', newIsolateScopeDirective, directive, $compileNode); |
| 4145 | if (isObject(directiveValue)) { |
| 4146 | safeAddClass($compileNode, 'ng-isolate-scope'); |
| 4147 | newIsolateScopeDirective = directive; |
| 4148 | } |
| 4149 | safeAddClass($compileNode, 'ng-scope'); |
| 4150 | newScopeDirective = newScopeDirective || directive; |
| 4151 | } |
| 4152 | |
| 4153 | directiveName = directive.name; |
| 4154 | |
| 4155 | if (directiveValue = directive.controller) { |
| 4156 | controllerDirectives = controllerDirectives || {}; |
| 4157 | assertNoDuplicate("'" + directiveName + "' controller", |
| 4158 | controllerDirectives[directiveName], directive, $compileNode); |
| 4159 | controllerDirectives[directiveName] = directive; |
| 4160 | } |
| 4161 | |
| 4162 | if (directiveValue = directive.transclude) { |
| 4163 | assertNoDuplicate('transclusion', transcludeDirective, directive, $compileNode); |
| 4164 | transcludeDirective = directive; |
| 4165 | terminalPriority = directive.priority; |
| 4166 | if (directiveValue == 'element') { |
| 4167 | $template = jqLite(compileNode); |
| 4168 | $compileNode = templateAttrs.$$element = |
| 4169 | jqLite(document.createComment(' ' + directiveName + ': ' + templateAttrs[directiveName] + ' ')); |
| 4170 | compileNode = $compileNode[0]; |
| 4171 | replaceWith(jqCollection, jqLite($template[0]), compileNode); |
| 4172 | childTranscludeFn = compile($template, transcludeFn, terminalPriority); |
| 4173 | } else { |
| 4174 | $template = jqLite(JQLiteClone(compileNode)).contents(); |
no test coverage detected