15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 31591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @extends {WebInspector.SelectionDialogContentProvider} 32a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.UISourceCode} uiSourceCode 3351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {function(number, number)} selectItemCallback 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.StyleSheetOutlineDialog = function(uiSourceCode, selectItemCallback) 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.SelectionDialogContentProvider.call(this); 3851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._selectItemCallback = selectItemCallback; 39d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._cssParser = new WebInspector.CSSParser(); 40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._cssParser.addEventListener(WebInspector.CSSParser.Events.RulesParsed, this.refresh.bind(this)); 41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._cssParser.parse(uiSourceCode.workingCopy()); 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 45a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.View} view 46a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.UISourceCode} uiSourceCode 4751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {function(number, number)} selectItemCallback 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 4951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)WebInspector.StyleSheetOutlineDialog.show = function(view, uiSourceCode, selectItemCallback) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (WebInspector.Dialog.currentInstance()) 525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return; 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var delegate = new WebInspector.StyleSheetOutlineDialog(uiSourceCode, selectItemCallback); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(delegate); 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.Dialog.show(view.element, filteredItemSelectionDialog); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.StyleSheetOutlineDialog.prototype = { 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 60591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @return {number} 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 62591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemCount: function() 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return this._cssParser.rules().length; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} itemIndex 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) itemKeyAt: function(itemIndex) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 73d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var rule = this._cssParser.rules()[itemIndex]; 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return rule.selectorText || rule.atRule; 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 76591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {number} itemIndex 79591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @return {number} 815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 82591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemScoreAt: function(itemIndex, query) 835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 84d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var rule = this._cssParser.rules()[itemIndex]; 8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return -rule.lineNumber; 865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }, 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 89591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {number} itemIndex 90591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 91a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} titleElement 92a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} subtitleElement 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 94591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch renderItem: function(itemIndex, query, titleElement, subtitleElement) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 96d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var rule = this._cssParser.rules()[itemIndex]; 9709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) titleElement.textContent = rule.selectorText || rule.atRule; 98591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.highlightRanges(titleElement, query); 9909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) subtitleElement.textContent = ":" + (rule.lineNumber + 1); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} itemIndex 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} promptValue 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selectItem: function(itemIndex, promptValue) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 108d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var rule = this._cssParser.rules()[itemIndex]; 10909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var lineNumber = rule.lineNumber; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isNaN(lineNumber) && lineNumber >= 0) 11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._selectItemCallback(lineNumber, rule.columnNumber); 11209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) }, 11309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 11409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) dispose: function() 11509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 116d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._cssParser.dispose(); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 119591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch __proto__: WebInspector.SelectionDialogContentProvider.prototype 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 121