|  | <!-- | 
|  | @license | 
|  | Copyright (C) 2018 The Android Open Source Project | 
|  |  | 
|  | Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | you may not use this file except in compliance with the License. | 
|  | You may obtain a copy of the License at | 
|  |  | 
|  | http://www.apache.org/licenses/LICENSE-2.0 | 
|  |  | 
|  | Unless required by applicable law or agreed to in writing, software | 
|  | distributed under the License is distributed on an "AS IS" BASIS, | 
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | See the License for the specific language governing permissions and | 
|  | limitations under the License. | 
|  | --> | 
|  | <script> | 
|  | (function(window) { | 
|  | 'use strict'; | 
|  |  | 
|  | window.Gerrit = window.Gerrit || {}; | 
|  |  | 
|  | /** @polymerBehavior Gerrit.DomUtilBehavior */ | 
|  | Gerrit.DomUtilBehavior = { | 
|  | /** | 
|  | * Are any ancestors of the element (or the element itself) members of the | 
|  | * given class. | 
|  | * @param {!Element} element | 
|  | * @param {string} className | 
|  | * @param {Element=} opt_stopElement If provided, stop traversing the | 
|  | *     ancestry when the stop element is reached. The stop element's class | 
|  | *     is not checked. | 
|  | * @return {boolean} | 
|  | */ | 
|  | descendedFromClass(element, className, opt_stopElement) { | 
|  | let isDescendant = element.classList.contains(className); | 
|  | while (!isDescendant && element.parentElement && | 
|  | (!opt_stopElement || element.parentElement !== opt_stopElement)) { | 
|  | isDescendant = element.classList.contains(className); | 
|  | element = element.parentElement; | 
|  | } | 
|  | return isDescendant; | 
|  | }, | 
|  | }; | 
|  | })(window); | 
|  | </script> |