| <!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> |