(directiveName, require, $element, elementControllers)
| 7487 | |
| 7488 | |
| 7489 | function getControllers(directiveName, require, $element, elementControllers) { |
| 7490 | var value, retrievalMethod = 'data', optional = false; |
| 7491 | var $searchElement = $element; |
| 7492 | var match; |
| 7493 | if (isString(require)) { |
| 7494 | match = require.match(REQUIRE_PREFIX_REGEXP); |
| 7495 | require = require.substring(match[0].length); |
| 7496 | |
| 7497 | if (match[3]) { |
| 7498 | if (match[1]) match[3] = null; |
| 7499 | else match[1] = match[3]; |
| 7500 | } |
| 7501 | if (match[1] === '^') { |
| 7502 | retrievalMethod = 'inheritedData'; |
| 7503 | } else if (match[1] === '^^') { |
| 7504 | retrievalMethod = 'inheritedData'; |
| 7505 | $searchElement = $element.parent(); |
| 7506 | } |
| 7507 | if (match[2] === '?') { |
| 7508 | optional = true; |
| 7509 | } |
| 7510 | |
| 7511 | value = null; |
| 7512 | |
| 7513 | if (elementControllers && retrievalMethod === 'data') { |
| 7514 | if (value = elementControllers[require]) { |
| 7515 | value = value.instance; |
| 7516 | } |
| 7517 | } |
| 7518 | value = value || $searchElement[retrievalMethod]('$' + require + 'Controller'); |
| 7519 | |
| 7520 | if (!value && !optional) { |
| 7521 | throw $compileMinErr('ctreq', |
| 7522 | "Controller '{0}', required by directive '{1}', can't be found!", |
| 7523 | require, directiveName); |
| 7524 | } |
| 7525 | return value || null; |
| 7526 | } else if (isArray(require)) { |
| 7527 | value = []; |
| 7528 | forEach(require, function(require) { |
| 7529 | value.push(getControllers(directiveName, require, $element, elementControllers)); |
| 7530 | }); |
| 7531 | } |
| 7532 | return value; |
| 7533 | } |
| 7534 | |
| 7535 | |
| 7536 | function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { |
no test coverage detected