/* * Copyright (C) 2012 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @constructor * @implements {WebInspector.SelectionDialogContentProvider} * @param {WebInspector.View} view * @param {WebInspector.StyleSource} styleSource */ WebInspector.StyleSheetOutlineDialog = function(view, styleSource) { WebInspector.SelectionDialogContentProvider.call(this); this._rules = []; this._view = view; this._styleSource = styleSource; } /** * @param {WebInspector.View} view * @param {WebInspector.StyleSource} styleSource */ WebInspector.StyleSheetOutlineDialog.show = function(view, styleSource) { if (WebInspector.Dialog.currentInstance()) return null; var delegate = new WebInspector.StyleSheetOutlineDialog(view, styleSource); var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(delegate); WebInspector.Dialog.show(view.element, filteredItemSelectionDialog); } WebInspector.StyleSheetOutlineDialog.prototype = { /** * @param {number} itemIndex * @return {string} */ itemTitleAt: function(itemIndex) { return this._rules[itemIndex].selectorText; }, /* * @param {number} itemIndex * @return {string} */ itemSuffixAt: function(itemIndex) { return ""; }, /* * @param {number} itemIndex * @return {string} */ itemSubtitleAt: function(itemIndex) { return ":" + (this._rules[itemIndex].sourceLine + 1); }, /** * @param {number} itemIndex * @return {string} */ itemKeyAt: function(itemIndex) { return this._rules[itemIndex].selectorText; }, /** * @return {number} */ itemsCount: function() { return this._rules.length; }, /** * @param {function(number, number, number, number)} callback */ requestItems: function(callback) { function didGetAllStyleSheets(error, infos) { if (error) { callback(0, 0, 0, 0); return; } for (var i = 0; i < infos.length; ++i) { var info = infos[i]; if (info.sourceURL === this._styleSource.contentURL()) { WebInspector.CSSStyleSheet.createForId(info.styleSheetId, didGetStyleSheet.bind(this)); return; } } callback(0, 0, 0, 0); } CSSAgent.getAllStyleSheets(didGetAllStyleSheets.bind(this)); /** * @param {?WebInspector.CSSStyleSheet} styleSheet */ function didGetStyleSheet(styleSheet) { if (!styleSheet) { callback(0, 0, 0, 0); return; } this._rules = styleSheet.rules; callback(0, this._rules.length, 0, 1); } }, /** * @param {number} itemIndex * @param {string} promptValue */ selectItem: function(itemIndex, promptValue) { var lineNumber = this._rules[itemIndex].sourceLine; if (!isNaN(lineNumber) && lineNumber >= 0) this._view.highlightLine(lineNumber); this._view.focus(); }, /** * @param {string} query * @return {string} */ rewriteQuery: function(query) { return query; } } WebInspector.StyleSheetOutlineDialog.prototype.__proto__ = WebInspector.SelectionDialogContentProvider.prototype;