blob: b8c5e9d050dcfd79aa404d816c38b96117fd1ba6 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2013 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="/tracing/base/base.html">
<script>
'use strict';
/**
* @fileoverview Helper code for working with Polymer.
*/
tr.exportTo('tr.ui.b', function() {
function getPolymerElementNamed(tagName) {
for (var i = 0; i < Polymer.elements.length; i++) {
if (Polymer.elements[i].name === tagName)
return Polymer.elements[i];
}
}
function getPolymerElementsThatSubclass(tagName) {
if (Polymer.waitingFor().length) {
throw new Error('There are unresolved polymer elements. ' +
'Wait until Polymer.whenReady');
}
var baseElement;
var elementNamesThatExtend = {};
Polymer.elements.forEach(function(element) {
if (element.name === tagName)
baseElement = element;
if (element.extends) {
if (elementNamesThatExtend[element.extends] === undefined)
elementNamesThatExtend[element.extends] = [];
elementNamesThatExtend[element.extends].push(element.name);
}
});
if (!baseElement)
throw new Error(tagName + ' is not a polymer element');
var allFoundSubElementNames = [baseElement.name];
for (var i = 0; i < allFoundSubElementNames.length; i++) {
var elementName = allFoundSubElementNames[i];
allFoundSubElementNames.push.apply(
allFoundSubElementNames, elementNamesThatExtend[elementName]);
}
// Remove the base element tag name from the list.
allFoundSubElementNames.shift();
return allFoundSubElementNames;
}
return {
getPolymerElementNamed: getPolymerElementNamed,
getPolymerElementsThatSubclass: getPolymerElementsThatSubclass
};
});
</script>