| Index: third_party/pkg/angular/lib/core_dom/selector.dart
|
| diff --git a/third_party/pkg/angular/lib/core_dom/selector.dart b/third_party/pkg/angular/lib/core_dom/selector.dart
|
| deleted file mode 100644
|
| index 2492d0608208a7831af9a8dc56412db804a71fe3..0000000000000000000000000000000000000000
|
| --- a/third_party/pkg/angular/lib/core_dom/selector.dart
|
| +++ /dev/null
|
| @@ -1,364 +0,0 @@
|
| -part of angular.core.dom;
|
| -
|
| -/**
|
| - * DirectiveSelector is a function which given a node it will return a
|
| - * list of [DirectiveRef]s which are triggered by this node.
|
| - *
|
| - * DirectiveSelector is used by the [Compiler] during the template walking
|
| - * to extract the [DirectiveRef]s.
|
| - *
|
| - * DirectiveSelector can be created using the [directiveSelectorFactory]
|
| - * method.
|
| - *
|
| - * The DirectiveSelector supports CSS selectors which do not cross
|
| - * element boundaries only. The selectors can have any mix of element-name,
|
| - * class-names and attribute-names.
|
| - *
|
| - * Examples:
|
| - *
|
| - * <pre>
|
| - * element
|
| - * .class
|
| - * [attribute]
|
| - * [attribute=value]
|
| - * element[attribute1][attribute2=value]
|
| - * </pre>
|
| - *
|
| - *
|
| - */
|
| -typedef List<DirectiveRef> DirectiveSelector(dom.Node node);
|
| -
|
| -class _Directive {
|
| - final Type type;
|
| - final NgAnnotation annotation;
|
| -
|
| - _Directive(this.type, this.annotation);
|
| -
|
| - toString() => annotation.selector;
|
| -}
|
| -
|
| -
|
| -class _ContainsSelector {
|
| - final NgAnnotation annotation;
|
| - final RegExp regexp;
|
| -
|
| - _ContainsSelector(this.annotation, String regexp)
|
| - : regexp = new RegExp(regexp);
|
| -}
|
| -
|
| -var _SELECTOR_REGEXP = new RegExp(r'^(?:([\w\-]+)|(?:\.([\w\-]+))|'
|
| - r'(?:\[([\w\-\*]+)(?:=([^\]]*))?\]))');
|
| -var _COMMENT_COMPONENT_REGEXP = new RegExp(r'^\[([\w\-]+)(?:\=(.*))?\]$');
|
| -var _CONTAINS_REGEXP = new RegExp(r'^:contains\(\/(.+)\/\)$'); //
|
| -var _ATTR_CONTAINS_REGEXP = new RegExp(r'^\[\*=\/(.+)\/\]$'); //
|
| -
|
| -class _SelectorPart {
|
| - final String element;
|
| - final String className;
|
| - final String attrName;
|
| - final String attrValue;
|
| -
|
| - const _SelectorPart.fromElement(this.element)
|
| - : className = null, attrName = null, attrValue = null;
|
| -
|
| - const _SelectorPart.fromClass(this.className)
|
| - : element = null, attrName = null, attrValue = null;
|
| -
|
| -
|
| - const _SelectorPart.fromAttribute(this.attrName, this.attrValue)
|
| - : element = null, className = null;
|
| -
|
| - toString() =>
|
| - element == null
|
| - ? (className == null
|
| - ? (attrValue == '' ? '[$attrName]' : '[$attrName=$attrValue]')
|
| - : '.$className')
|
| - : element;
|
| -}
|
| -
|
| -
|
| -class _ElementSelector {
|
| - final String name;
|
| -
|
| - var elementMap = <String, List<_Directive>>{};
|
| - var elementPartialMap = <String, _ElementSelector>{};
|
| -
|
| - var classMap = <String, List<_Directive>>{};
|
| - var classPartialMap = <String, _ElementSelector>{};
|
| -
|
| - var attrValueMap = <String, Map<String, List<_Directive>>>{};
|
| - var attrValuePartialMap = <String, Map<String, _ElementSelector>>{};
|
| -
|
| - _ElementSelector(this.name);
|
| -
|
| - addDirective(List<_SelectorPart> selectorParts, _Directive directive) {
|
| - var selectorPart = selectorParts.removeAt(0);
|
| - var terminal = selectorParts.isEmpty;
|
| - var name;
|
| - if ((name = selectorPart.element) != null) {
|
| - if (terminal) {
|
| - elementMap
|
| - .putIfAbsent(name, () => [])
|
| - .add(directive);
|
| - } else {
|
| - elementPartialMap
|
| - .putIfAbsent(name, () => new _ElementSelector(name))
|
| - .addDirective(selectorParts, directive);
|
| - }
|
| - } else if ((name = selectorPart.className) != null) {
|
| - if (terminal) {
|
| - classMap
|
| - .putIfAbsent(name, () => [])
|
| - .add(directive);
|
| - } else {
|
| - classPartialMap
|
| - .putIfAbsent(name, () => new _ElementSelector(name))
|
| - .addDirective(selectorParts, directive);
|
| - }
|
| - } else if ((name = selectorPart.attrName) != null) {
|
| - if (terminal) {
|
| - attrValueMap
|
| - .putIfAbsent(name, () => <String, List<_Directive>>{})
|
| - .putIfAbsent(selectorPart.attrValue, () => [])
|
| - .add(directive);
|
| - } else {
|
| - attrValuePartialMap
|
| - .putIfAbsent(name, () => <String, _ElementSelector>{})
|
| - .putIfAbsent(selectorPart.attrValue, () =>
|
| - new _ElementSelector(name))
|
| - .addDirective(selectorParts, directive);
|
| - }
|
| - } else {
|
| - throw "Unknown selector part '$selectorPart'.";
|
| - }
|
| - }
|
| -
|
| - _addRefs(List<DirectiveRef> refs, List<_Directive> directives, dom.Node node,
|
| - [String attrValue]) {
|
| - directives.forEach((directive) =>
|
| - refs.add(new DirectiveRef(node, directive.type, directive.annotation,
|
| - attrValue)));
|
| - }
|
| -
|
| - List<_ElementSelector> selectNode(List<DirectiveRef> refs,
|
| - List<_ElementSelector> partialSelection,
|
| - dom.Node node, String nodeName) {
|
| - if (elementMap.containsKey(nodeName)) {
|
| - _addRefs(refs, elementMap[nodeName], node);
|
| - }
|
| - if (elementPartialMap.containsKey(nodeName)) {
|
| - if (partialSelection == null) {
|
| - partialSelection = new List<_ElementSelector>();
|
| - }
|
| - partialSelection.add(elementPartialMap[nodeName]);
|
| - }
|
| - return partialSelection;
|
| - }
|
| -
|
| - List<_ElementSelector> selectClass(List<DirectiveRef> refs,
|
| - List<_ElementSelector> partialSelection,
|
| - dom.Node node, String className) {
|
| - if (classMap.containsKey(className)) {
|
| - _addRefs(refs, classMap[className], node);
|
| - }
|
| - if (classPartialMap.containsKey(className)) {
|
| - if (partialSelection == null) {
|
| - partialSelection = new List<_ElementSelector>();
|
| - }
|
| - partialSelection.add(classPartialMap[className]);
|
| - }
|
| - return partialSelection;
|
| - }
|
| -
|
| - List<_ElementSelector> selectAttr(List<DirectiveRef> refs,
|
| - List<_ElementSelector> partialSelection,
|
| - dom.Node node, String attrName,
|
| - String attrValue) {
|
| -
|
| - String matchingKey = _matchingKey(attrValueMap.keys, attrName);
|
| -
|
| - if (matchingKey != null) {
|
| - Map<String, List<_Directive>> valuesMap = attrValueMap[matchingKey];
|
| - if (valuesMap.containsKey('')) {
|
| - _addRefs(refs, valuesMap[''], node, attrValue);
|
| - }
|
| - if (attrValue != '' && valuesMap.containsKey(attrValue)) {
|
| - _addRefs(refs, valuesMap[attrValue], node, attrValue);
|
| - }
|
| - }
|
| - if (attrValuePartialMap.containsKey(attrName)) {
|
| - Map<String, _ElementSelector> valuesPartialMap =
|
| - attrValuePartialMap[attrName];
|
| - if (valuesPartialMap.containsKey('')) {
|
| - if (partialSelection == null) {
|
| - partialSelection = new List<_ElementSelector>();
|
| - }
|
| - partialSelection.add(valuesPartialMap['']);
|
| - }
|
| - if (attrValue != '' && valuesPartialMap.containsKey(attrValue)) {
|
| - if (partialSelection == null) {
|
| - partialSelection = new List<_ElementSelector>();
|
| - }
|
| - partialSelection.add(valuesPartialMap[attrValue]);
|
| - }
|
| - }
|
| - return partialSelection;
|
| - }
|
| -
|
| - String _matchingKey(Iterable<String> keys, String attrName) =>
|
| - keys.firstWhere((key) =>
|
| - new RegExp('^${key.replaceAll('*', r'[\w\-]+')}\$')
|
| - .hasMatch(attrName), orElse: () => null);
|
| -
|
| - toString() => 'ElementSelector($name)';
|
| -}
|
| -
|
| -List<_SelectorPart> _splitCss(String selector, Type type) {
|
| - var parts = <_SelectorPart>[];
|
| - var remainder = selector;
|
| - var match;
|
| - while (!remainder.isEmpty) {
|
| - if ((match = _SELECTOR_REGEXP.firstMatch(remainder)) != null) {
|
| - if (match[1] != null) {
|
| - parts.add(new _SelectorPart.fromElement(match[1].toLowerCase()));
|
| - } else if (match[2] != null) {
|
| - parts.add(new _SelectorPart.fromClass(match[2].toLowerCase()));
|
| - } else if (match[3] != null) {
|
| - var attrValue = match[4] == null ? '' : match[4].toLowerCase();
|
| - parts.add(new _SelectorPart.fromAttribute(match[3].toLowerCase(),
|
| - attrValue));
|
| - } else {
|
| - throw "Missmatched RegExp $_SELECTOR_REGEXP on $remainder";
|
| - }
|
| - } else {
|
| - throw "Unknown selector format '$selector' for $type.";
|
| - }
|
| - remainder = remainder.substring(match.end);
|
| - }
|
| - return parts;
|
| -}
|
| -
|
| -/**
|
| - * Factory method for creating a [DirectiveSelector].
|
| - */
|
| -DirectiveSelector directiveSelectorFactory(DirectiveMap directives) {
|
| -
|
| - var elementSelector = new _ElementSelector('');
|
| - var attrSelector = <_ContainsSelector>[];
|
| - var textSelector = <_ContainsSelector>[];
|
| - directives.forEach((NgAnnotation annotation, Type type) {
|
| - var match;
|
| - var selector = annotation.selector;
|
| - List<_SelectorPart> selectorParts;
|
| - if (selector == null) {
|
| - throw new ArgumentError('Missing selector annotation for $type');
|
| - }
|
| -
|
| - if ((match = _CONTAINS_REGEXP.firstMatch(selector)) != null) {
|
| - textSelector.add(new _ContainsSelector(annotation, match.group(1)));
|
| - } else if ((match = _ATTR_CONTAINS_REGEXP.firstMatch(selector)) != null) {
|
| - attrSelector.add(new _ContainsSelector(annotation, match[1]));
|
| - } else if ((selectorParts = _splitCss(selector, type)) != null){
|
| - elementSelector.addDirective(selectorParts,
|
| - new _Directive(type, annotation));
|
| - } else {
|
| - throw new ArgumentError('Unsupported Selector: $selector');
|
| - }
|
| - });
|
| -
|
| - return (dom.Node node) {
|
| - var directiveRefs = <DirectiveRef>[];
|
| - List<_ElementSelector> partialSelection;
|
| - var classes = <String, bool>{};
|
| - var attrs = <String, String>{};
|
| -
|
| - switch(node.nodeType) {
|
| - case 1: // Element
|
| - dom.Element element = node;
|
| - String nodeName = element.tagName.toLowerCase();
|
| - Map<String, String> attrs = {};
|
| -
|
| - // Set default attribute
|
| - if (nodeName == 'input' && !element.attributes.containsKey('type')) {
|
| - element.attributes['type'] = 'text';
|
| - }
|
| -
|
| - // Select node
|
| - partialSelection = elementSelector.selectNode(directiveRefs,
|
| - partialSelection, element, nodeName);
|
| -
|
| - // Select .name
|
| - if ((element.classes) != null) {
|
| - for (var name in element.classes) {
|
| - classes[name] = true;
|
| - partialSelection = elementSelector.selectClass(directiveRefs,
|
| - partialSelection, element, name);
|
| - }
|
| - }
|
| -
|
| - // Select [attributes]
|
| - element.attributes.forEach((attrName, value) {
|
| - attrs[attrName] = value;
|
| - for (var k = 0; k < attrSelector.length; k++) {
|
| - _ContainsSelector selectorRegExp = attrSelector[k];
|
| - if (selectorRegExp.regexp.hasMatch(value)) {
|
| - // this directive is matched on any attribute name, and so
|
| - // we need to pass the name to the directive by prefixing it to
|
| - // the value. Yes it is a bit of a hack.
|
| - directives[selectorRegExp.annotation].forEach((type) {
|
| - directiveRefs.add(new DirectiveRef(
|
| - node, type, selectorRegExp.annotation, '$attrName=$value'));
|
| - });
|
| - }
|
| - }
|
| -
|
| - partialSelection = elementSelector.selectAttr(directiveRefs,
|
| - partialSelection, node, attrName, value);
|
| - });
|
| -
|
| - while(partialSelection != null) {
|
| - List<_ElementSelector> elementSelectors = partialSelection;
|
| - partialSelection = null;
|
| - elementSelectors.forEach((_ElementSelector elementSelector) {
|
| - classes.forEach((className, _) {
|
| - partialSelection = elementSelector.selectClass(directiveRefs,
|
| - partialSelection, node, className);
|
| - });
|
| - attrs.forEach((attrName, value) {
|
| - partialSelection = elementSelector.selectAttr(directiveRefs,
|
| - partialSelection, node, attrName, value);
|
| - });
|
| - });
|
| - }
|
| - break;
|
| - case 3: // Text Node
|
| - var value = node.nodeValue;
|
| - for (var k = 0; k < textSelector.length; k++) {
|
| - var selectorRegExp = textSelector[k];
|
| -
|
| - if (selectorRegExp.regexp.hasMatch(value)) {
|
| - directives[selectorRegExp.annotation].forEach((type) {
|
| - directiveRefs.add(new DirectiveRef(node, type,
|
| - selectorRegExp.annotation, value));
|
| - });
|
| - }
|
| - }
|
| - break;
|
| - }
|
| -
|
| - directiveRefs.sort(_priorityComparator);
|
| - return directiveRefs;
|
| - };
|
| -}
|
| -
|
| -int _directivePriority(NgAnnotation annotation) {
|
| - if (annotation is NgDirective) {
|
| - return (annotation.children == NgAnnotation.TRANSCLUDE_CHILDREN) ? 2 : 1;
|
| - } else if (annotation is NgComponent) {
|
| - return 0;
|
| - }
|
| - throw "Unexpected Type: ${annotation}.";
|
| -}
|
| -
|
| -int _priorityComparator(DirectiveRef a, DirectiveRef b) =>
|
| - _directivePriority(b.annotation) - _directivePriority(a.annotation);
|
|
|