(directiveName, require, $element, elementControllers)
| 6591 | |
| 6592 | |
| 6593 | function getControllers(directiveName, require, $element, elementControllers) { |
| 6594 | var value, retrievalMethod = 'data', optional = false; |
| 6595 | if (isString(require)) { |
| 6596 | while((value = require.charAt(0)) == '^' || value == '?') { |
| 6597 | require = require.substr(1); |
| 6598 | if (value == '^') { |
| 6599 | retrievalMethod = 'inheritedData'; |
| 6600 | } |
| 6601 | optional = optional || value == '?'; |
| 6602 | } |
| 6603 | value = null; |
| 6604 | |
| 6605 | if (elementControllers && retrievalMethod === 'data') { |
| 6606 | value = elementControllers[require]; |
| 6607 | } |
| 6608 | value = value || $element[retrievalMethod]('$' + require + 'Controller'); |
| 6609 | |
| 6610 | if (!value && !optional) { |
| 6611 | throw $compileMinErr('ctreq', |
| 6612 | "Controller '{0}', required by directive '{1}', can't be found!", |
| 6613 | require, directiveName); |
| 6614 | } |
| 6615 | return value; |
| 6616 | } else if (isArray(require)) { |
| 6617 | value = []; |
| 6618 | forEach(require, function(require) { |
| 6619 | value.push(getControllers(directiveName, require, $element, elementControllers)); |
| 6620 | }); |
| 6621 | } |
| 6622 | return value; |
| 6623 | } |
| 6624 | |
| 6625 | |
| 6626 | function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { |
no test coverage detected