| // 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. |
| import {StylesSidebarPane} from './StylesSidebarPane.js'; // eslint-disable-line no-unused-vars |
| |
| /** |
| * @unrestricted |
| */ |
| export class StylePropertyHighlighter { |
| /** |
| * @param {!StylesSidebarPane} ssp |
| * @param {!SDK.CSSProperty} cssProperty |
| */ |
| constructor(ssp, cssProperty) { |
| this._styleSidebarPane = ssp; |
| this._cssProperty = cssProperty; |
| } |
| |
| perform() { |
| // Expand all shorthands. |
| for (const section of this._styleSidebarPane.allSections()) { |
| for (let treeElement = section.propertiesTreeOutline.firstChild(); treeElement; |
| treeElement = treeElement.nextSibling) { |
| treeElement.onpopulate(); |
| } |
| } |
| let highlightTreeElement = null; |
| for (const section of this._styleSidebarPane.allSections()) { |
| let treeElement = section.propertiesTreeOutline.firstChild(); |
| while (treeElement && !highlightTreeElement) { |
| if (treeElement.property === this._cssProperty) { |
| highlightTreeElement = treeElement; |
| break; |
| } |
| treeElement = treeElement.traverseNextTreeElement(false, null, true); |
| } |
| if (highlightTreeElement) { |
| break; |
| } |
| } |
| |
| if (!highlightTreeElement) { |
| return; |
| } |
| |
| highlightTreeElement.parent.expand(); |
| highlightTreeElement.listItemElement.scrollIntoViewIfNeeded(); |
| highlightTreeElement.listItemElement.animate( |
| [ |
| {offset: 0, backgroundColor: 'rgba(255, 255, 0, 0.2)'}, |
| {offset: 0.1, backgroundColor: 'rgba(255, 255, 0, 0.7)'}, {offset: 1, backgroundColor: 'transparent'} |
| ], |
| {duration: 2000, easing: 'cubic-bezier(0, 0, 0.2, 1)'}); |
| } |
| } |