| OLD | NEW |
| 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 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 if (part.element != null) { | 94 if (part.element != null) { |
| 95 if (nodeName != part.element) { | 95 if (nodeName != part.element) { |
| 96 stillGood = false; | 96 stillGood = false; |
| 97 } | 97 } |
| 98 } else if (part.className != null) { | 98 } else if (part.className != null) { |
| 99 if (node.attributes['class'] == null || | 99 if (node.attributes['class'] == null || |
| 100 !node.attributes['class'].split(' ').contains(part.className)) { | 100 !node.attributes['class'].split(' ').contains(part.className)) { |
| 101 stillGood = false; | 101 stillGood = false; |
| 102 } | 102 } |
| 103 } else if (part.attrName != null) { | 103 } else if (part.attrName != null) { |
| 104 if (part.attrValue == '' ? | 104 String matchingKey = _matchingKey(node.attributes.keys, part.attrName); |
| 105 node.attributes[part.attrName] == null : | 105 if (matchingKey == null || part.attrValue == '' ? |
| 106 node.attributes[part.attrName] != part.attrValue) { | 106 node.attributes[matchingKey] == null : |
| 107 node.attributes[matchingKey] != part.attrValue) { |
| 107 stillGood = false; | 108 stillGood = false; |
| 108 } | 109 } |
| 109 } | 110 } |
| 110 }); | 111 }); |
| 111 | 112 |
| 112 return stillGood; | 113 return stillGood; |
| 113 } else { | 114 } else { |
| 114 throw new ArgumentError('Unsupported Selector: $selector'); | 115 throw new ArgumentError('Unsupported Selector: $selector'); |
| 115 } | 116 } |
| 116 | 117 |
| 117 switch(node.nodeType) { | 118 switch(node.nodeType) { |
| 118 case 1: // Element | 119 case 1: // Element |
| 119 break; | 120 break; |
| 120 case 3: // Text Node | 121 case 3: // Text Node |
| 121 break; | 122 break; |
| 122 } | 123 } |
| 123 return false; | 124 return false; |
| 124 } | 125 } |
| 126 |
| 127 String _matchingKey(Iterable keys, String attrName) => |
| 128 keys.firstWhere( |
| 129 (key) => new RegExp('^${attrName.replaceAll('*', r'[\w\-]+')}\$').hasMat
ch(key.toString()), |
| 130 orElse: () => null); |
| OLD | NEW |