elementMatches(node, selector, matcher = null) { if (this.isElementNode(node) && selector === '*') { return true; } var result = false; if (selector && selector.charAt(0) == "#") { result = this.getAttribute(node, 'id') == selector.substring(1); } else if (selector) { var result = false; if (matcher == null) { matcher = new SelectorMatcher(); matcher.addSelectables(CssSelector.parse(selector)); } var cssSelector = new CssSelector(); cssSelector.setElement(this.tagName(node)); if (node.attribs) { for (var attrName in node.attribs) { cssSelector.addAttribute(attrName, node.attribs[attrName]); } } var classList = this.classList(node); for (var i = 0; i < classList.length; i++) { cssSelector.addClassName(classList[i]); } matcher.match(cssSelector, function (selector, cb) { result = true; }); } return result; }
function addSelectable() { var matcher = new SelectorMatcher(); for (var i=0; i<count; i++) { matcher.addSelectables(fixedSelectors[i], i); } return matcher; }
export function main() { BrowserDomAdapter.makeCurrent(); var count = getIntParameter('selectors'); var fixedMatcher; var fixedSelectorStrings = []; var fixedSelectors = []; for (var i=0; i<count; i++) { ListWrapper.push(fixedSelectorStrings, randomSelector()); } for (var i=0; i<count; i++) { ListWrapper.push(fixedSelectors, CssSelector.parse(fixedSelectorStrings[i])); } fixedMatcher = new SelectorMatcher(); for (var i=0; i<count; i++) { fixedMatcher.addSelectables(fixedSelectors[i], i); } function parse() { var result = []; for (var i=0; i<count; i++) { ListWrapper.push(result, CssSelector.parse(fixedSelectorStrings[i])); } return result; } function addSelectable() { var matcher = new SelectorMatcher(); for (var i=0; i<count; i++) { matcher.addSelectables(fixedSelectors[i], i); } return matcher; } function match() { var matchCount = 0; for (var i=0; i<count; i++) { fixedMatcher.match(fixedSelectors[i][0], (selector, selected) => { matchCount += selected; }); } return matchCount; } bindAction('#parse', parse); bindAction('#addSelectable', addSelectable); bindAction('#match', match); }
Component.create = function (directives) { if (directives.length === 0 || !directives[0].directive.isComponent) { return EMPTY_COMPONENT; } var matcher = new selector_1.SelectorMatcher(); var ngContentSelectors = directives[0].directive.template.ngContentSelectors; var wildcardNgContentIndex = null; for (var i = 0; i < ngContentSelectors.length; i++) { var selector = ngContentSelectors[i]; if (lang_1.StringWrapper.equals(selector, '*')) { wildcardNgContentIndex = i; } else { matcher.addSelectables(selector_1.CssSelector.parse(ngContentSelectors[i]), i); } } return new Component(matcher, wildcardNgContentIndex); };
querySelectorAll(el, selector) { var res = []; var _recursive = (result, node, selector, matcher) => { var cNodes = node.childNodes; if (cNodes && cNodes.length > 0) { for (var i = 0; i < cNodes.length; i++) { var childNode = cNodes[i]; if (this.elementMatches(childNode, selector, matcher)) { result.push(childNode); } _recursive(result, childNode, selector, matcher); } } }; var matcher = new SelectorMatcher(); matcher.addSelectables(CssSelector.parse(selector)); _recursive(res, el, selector, matcher); return res; }