Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: third_party/pkg/angular/lib/tools/selector.dart

Issue 256553002: Revert "Update all Angular libs (run update_all.sh)." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 library selector; 1 library selector;
2 2
3 import 'package:html5lib/dom.dart'; 3 import 'package:html5lib/dom.dart';
4 4
5 class ContainsSelector { 5 class ContainsSelector {
6 String selector; 6 String selector;
7 RegExp regexp; 7 RegExp regexp;
8 8
9 ContainsSelector(this.selector, regexp) { 9 ContainsSelector(this.selector, regexp) {
10 this.regexp = new RegExp(regexp); 10 this.regexp = new RegExp(regexp);
11 } 11 }
12 } 12 }
13 13
14 RegExp _SELECTOR_REGEXP = new RegExp(r'^(?:([\w\-]+)|(?:\.([\w\-]+))|(?:\[([\w\- \*]+)(?:=([^\]]*))?\]))'); 14 RegExp _SELECTOR_REGEXP = new RegExp(r'^(?:([\w\-]+)|(?:\.([\w\-]+))|(?:\[([\w\- \*]+)(?:=([^\]]*))?\]))');
15 RegExp _COMMENT_COMPONENT_REGEXP = new RegExp(r'^\[([\w\-]+)(?:\=(.*))?\]$'); 15 RegExp _COMMENT_COMPONENT_REGEXP = new RegExp(r'^\[([\w\-]+)(?:\=(.*))?\]$');
16 RegExp _CONTAINS_REGEXP = new RegExp(r'^:contains\(\/(.+)\/\)$'); // 16 RegExp _CONTAINS_REGEXP = new RegExp(r'^:contains\(\/(.+)\/\)$'); //
17 RegExp _ATTR_CONTAINS_REGEXP = new RegExp(r'^\[\*=\/(.+)\/\]$'); // 17 RegExp _ATTR_CONTAINS_REGEXP = new RegExp(r'^\[\*=\/(.+)\/\]$'); //
18 18
19 class _SelectorPart { 19 class _SelectorPart {
20 final String element; 20 final String element;
21 final String className; 21 final String className;
22 final String attrName; 22 final String attrName;
23 final String attrValue; 23 final String attrValue;
24 24
25 const _SelectorPart.fromElement(this.element) 25 const _SelectorPart.fromElement(String this.element)
26 : className = null, attrName = null, attrValue = null; 26 : className = null, attrName = null, attrValue = null;
27 27
28 const _SelectorPart.fromClass(this.className) 28 const _SelectorPart.fromClass(String this.className)
29 : element = null, attrName = null, attrValue = null; 29 : element = null, attrName = null, attrValue = null;
30 30
31 31
32 const _SelectorPart.fromAttribute(this.attrName, this.attrValue) 32 const _SelectorPart.fromAttribute(String this.attrName, String this.attrValue)
33 : element = null, className = null; 33 : element = null, className = null;
34 34
35 String toString() => 35 toString() =>
36 element == null 36 element == null
37 ? (className == null 37 ? (className == null
38 ? (attrValue == '' ? '[$attrName]' : '[$attrName=$attrValue]') 38 ? (attrValue == '' ? '[$attrName]' : '[$attrName=$attrValue]')
39 : '.$className') 39 : '.$className')
40 : element; 40 : element;
41 } 41 }
42 42
43 List<_SelectorPart> _splitCss(String selector) { 43 List<_SelectorPart> _splitCss(String selector) {
44 List<_SelectorPart> parts = []; 44 List<_SelectorPart> parts = [];
45 var remainder = selector; 45 var remainder = selector;
(...skipping 18 matching lines...) Expand all
64 } 64 }
65 return parts; 65 return parts;
66 } 66 }
67 67
68 bool matchesNode(Node node, String selector) { 68 bool matchesNode(Node node, String selector) {
69 var match, selectorParts; 69 var match, selectorParts;
70 if ((match = _CONTAINS_REGEXP.firstMatch(selector)) != null) { 70 if ((match = _CONTAINS_REGEXP.firstMatch(selector)) != null) {
71 if (node is! Text) { 71 if (node is! Text) {
72 return false; 72 return false;
73 } 73 }
74 return new RegExp(match.group(1)).hasMatch((node as Text).text); 74 return new RegExp(match.group(1)).hasMatch((node as Text).value);
75 } else if ((match = _ATTR_CONTAINS_REGEXP.firstMatch(selector)) != null) { 75 } else if ((match = _ATTR_CONTAINS_REGEXP.firstMatch(selector)) != null) {
76 if (node is! Element) { 76 if (node is! Element) {
77 return false; 77 return false;
78 } 78 }
79 var regexp = new RegExp(match.group(1)); 79 var regexp = new RegExp(match.group(1));
80 for (String attrName in node.attributes.keys) { 80 for (String attrName in node.attributes.keys) {
81 if (regexp.hasMatch(node.attributes[attrName])) { 81 if (regexp.hasMatch(node.attributes[attrName])) {
82 return true; 82 return true;
83 } 83 }
84 } 84 }
85 return false; 85 return false;
86 } else if ((selectorParts = _splitCss(selector)) != null) { 86 } else if ((selectorParts = _splitCss(selector)) != null) {
87 if (node is! Element) return false; 87 if (node is! Element) {
88 String nodeName = (node as Element).localName.toLowerCase(); 88 return false;
89 }
90 String nodeName = node.tagName.toLowerCase();
89 91
90 bool stillGood = true; 92 bool stillGood = true;
91 selectorParts.forEach((_SelectorPart part) { 93 selectorParts.forEach((_SelectorPart part) {
92 if (part.element != null) { 94 if (part.element != null) {
93 if (nodeName != part.element) { 95 if (nodeName != part.element) {
94 stillGood = false; 96 stillGood = false;
95 } 97 }
96 } else if (part.className != null) { 98 } else if (part.className != null) {
97 if (node.attributes['class'] == null || 99 if (node.attributes['class'] == null ||
98 !node.attributes['class'].split(' ').contains(part.className)) { 100 !node.attributes['class'].split(' ').contains(part.className)) {
99 stillGood = false; 101 stillGood = false;
100 } 102 }
101 } else if (part.attrName != null) { 103 } else if (part.attrName != null) {
102 String matchingKey = _matchingKey(node.attributes.keys, part.attrName); 104 String matchingKey = _matchingKey(node.attributes.keys, part.attrName);
103 if (matchingKey == null || part.attrValue == '' ? 105 if (matchingKey == null || part.attrValue == '' ?
104 node.attributes[matchingKey] == null : 106 node.attributes[matchingKey] == null :
105 node.attributes[matchingKey] != part.attrValue) { 107 node.attributes[matchingKey] != part.attrValue) {
106 stillGood = false; 108 stillGood = false;
107 } 109 }
108 } 110 }
109 }); 111 });
110 112
111 return stillGood; 113 return stillGood;
112 } 114 }
113 115
114 throw new ArgumentError('Unsupported Selector: $selector'); 116 throw new ArgumentError('Unsupported Selector: $selector');
115 } 117 }
116 118
117 String _matchingKey(Iterable keys, String attrName) => 119 String _matchingKey(Iterable keys, String attrName) =>
118 keys.firstWhere( 120 keys.firstWhere(
119 (key) => new RegExp('^${attrName.replaceAll('*', r'[\w\-]+')}\$').hasMat ch(key.toString()), 121 (key) => new RegExp('^${attrName.replaceAll('*', r'[\w\-]+')}\$').hasMat ch(key.toString()),
120 orElse: () => null); 122 orElse: () => null);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698