forked from angular/angular.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathngTranscludeSelect.js
49 lines (43 loc) · 1.22 KB
/
ngTranscludeSelect.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
'use strict';
/**
* @ngdoc directive
* @name ngTranscludeSelect
* @restrict EAC
*
* @description
*
* @element ANY
*
*/
var ngTranscludeSelectDirective = ngDirective({
restrict: 'EAC',
link: function($scope, $element, $attrs, controller, $transclude) {
checkTranscludeOption();
$transclude(transcludeSelection);
function transcludeSelection(clone) {
var selector = $attrs.ngTranscludeSelect;
var selectedElements = getSelectedElements(clone, selector);
if (selectedElements.length) $element.append(selectedElements);
}
function getSelectedElements(clone, selector) {
var wrapper = wrapClone(clone);
var selectedElements = wrapper[0].querySelectorAll(selector);
wrapper.remove();
return selectedElements;
}
function wrapClone(clone) {
var wrapper = jqLite("<div>");
wrapper.append(clone);
return wrapper;
}
function checkTranscludeOption() {
if (!$transclude) {
throw minErr('ngTransclude')('orphan',
'Illegal use of ngTranscludeSelect directive in the template! ' +
'No parent directive that requires a transclusion found. ' +
'Element: {0}',
startingTag($element));
}
}
}
});