blob: 70d77954791c3b742f43848d42da4831ad1f9612 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2015 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="/base/base.html">
<script>
'use strict';
tr.exportTo('tr.b', function() {
function _iterateElementDeeplyImpl(element, cb, thisArg, includeElement) {
if (includeElement) {
if (cb.call(thisArg, element))
return true;
}
if (element.shadowRoot) {
if (_iterateElementDeeplyImpl(element.shadowRoot, cb, thisArg, false))
return true;
}
for (var i = 0; i < element.children.length; i++) {
if (_iterateElementDeeplyImpl(element.children[i], cb, thisArg, true))
return true;
}
}
function iterateElementDeeply(element, cb, thisArg) {
_iterateElementDeeplyImpl(element, cb, thisArg, false);
}
function findDeepElementMatchingPredicate(element, predicate) {
var foundElement = undefined;
function matches(element) {
var match = predicate(element);
if (!match)
return false;
foundElement = element;
return true;
}
iterateElementDeeply(element, matches);
return foundElement;
}
function findDeepElementsMatchingPredicate(element, predicate) {
var foundElements = [];
function matches(element) {
var match = predicate(element);
if (match) {
foundElements.push(element);
}
return false;
}
iterateElementDeeply(element, matches);
return foundElements;
}
function findDeepElementMatching(element, selector) {
return findDeepElementMatchingPredicate(element, function(element) {
return element.matches(selector);
});
}
function findDeepElementsMatching(element, selector) {
return findDeepElementsMatchingPredicate(element, function(element) {
return element.matches(selector);
});
}
function findDeepElementWithTextContent(element, re) {
return findDeepElementMatchingPredicate(element, function(element) {
if (element.children.length !== 0)
return false;
return re.test(element.textContent);
});
}
return {
iterateElementDeeply: iterateElementDeeply,
findDeepElementMatching: findDeepElementMatching,
findDeepElementsMatching: findDeepElementsMatching,
findDeepElementMatchingPredicate: findDeepElementMatchingPredicate,
findDeepElementsMatchingPredicate: findDeepElementsMatchingPredicate,
findDeepElementWithTextContent: findDeepElementWithTextContent
};
});
</script>