2 * Copyright (C) 2012 Google Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above
12 * copyright notice, this list of conditions and the following disclaimer
13 * in the documentation and/or other materials provided with the
16 * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC.
20 * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 * @extends {WebInspector.SelectionDialogContentProvider}
32 * @param {!WebInspector.UISourceCode} uiSourceCode
33 * @param {function(number, number)} selectItemCallback
35 WebInspector.StyleSheetOutlineDialog = function(uiSourceCode, selectItemCallback)
37 WebInspector.SelectionDialogContentProvider.call(this);
38 this._selectItemCallback = selectItemCallback;
39 this._cssParser = new WebInspector.CSSParser();
40 this._cssParser.addEventListener(WebInspector.CSSParser.Events.RulesParsed, this.refresh.bind(this));
41 this._cssParser.parse(uiSourceCode.workingCopy());
45 * @param {!WebInspector.Widget} view
46 * @param {!WebInspector.UISourceCode} uiSourceCode
47 * @param {function(number, number)} selectItemCallback
49 WebInspector.StyleSheetOutlineDialog.show = function(view, uiSourceCode, selectItemCallback)
51 if (WebInspector.Dialog.currentInstance())
53 var delegate = new WebInspector.StyleSheetOutlineDialog(uiSourceCode, selectItemCallback);
54 var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(delegate);
55 WebInspector.Dialog.show(view.element, filteredItemSelectionDialog);
58 WebInspector.StyleSheetOutlineDialog.prototype = {
65 return this._cssParser.rules().length;
70 * @param {number} itemIndex
73 itemKeyAt: function(itemIndex)
75 var rule = this._cssParser.rules()[itemIndex];
76 return rule.selectorText || rule.atRule;
81 * @param {number} itemIndex
82 * @param {string} query
85 itemScoreAt: function(itemIndex, query)
87 var rule = this._cssParser.rules()[itemIndex];
88 return -rule.lineNumber;
93 * @param {number} itemIndex
94 * @param {string} query
95 * @param {!Element} titleElement
96 * @param {!Element} subtitleElement
98 renderItem: function(itemIndex, query, titleElement, subtitleElement)
100 var rule = this._cssParser.rules()[itemIndex];
101 titleElement.textContent = rule.selectorText || rule.atRule;
102 this.highlightRanges(titleElement, query);
103 subtitleElement.textContent = ":" + (rule.lineNumber + 1);
108 * @param {number} itemIndex
109 * @param {string} promptValue
111 selectItem: function(itemIndex, promptValue)
113 var rule = this._cssParser.rules()[itemIndex];
114 var lineNumber = rule.lineNumber;
115 if (!isNaN(lineNumber) && lineNumber >= 0)
116 this._selectItemCallback(lineNumber, rule.columnNumber);
121 this._cssParser.dispose();
124 __proto__: WebInspector.SelectionDialogContentProvider.prototype