15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 Matt Lilek (pewtermoose@gmail.com). 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Joseph Pecoraro 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All rights reserved. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * its contributors may be used to endorse or promote products derived 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * from this software without specific prior written permission. 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 34d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox} 35a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Searchable} searchable 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)WebInspector.SearchableView = function(searchable) 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 39d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.VBox.call(this); 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._searchProvider = searchable; 4251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this.element.addEventListener("keydown", this._onKeyDown.bind(this), false); 4351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 44d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._footerElementContainer = this.element.createChild("div", "search-bar status-bar hidden"); 4551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._footerElementContainer.style.order = 100; 4651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 4751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._footerElement = this._footerElementContainer.createChild("table", "toolbar-search"); 4851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._footerElement.cellSpacing = 0; 4951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 5051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._firstRowElement = this._footerElement.createChild("tr"); 5151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._secondRowElement = this._footerElement.createChild("tr", "hidden"); 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Column 1 54591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var searchControlElementColumn = this._firstRowElement.createChild("td"); 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchControlElement = searchControlElementColumn.createChild("span", "toolbar-search-control"); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchInputElement = this._searchControlElement.createChild("input", "search-replace"); 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchInputElement.id = "search-input-field"; 58f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) this._searchInputElement.placeholder = WebInspector.UIString("Find"); 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._matchesElement = this._searchControlElement.createChild("label", "search-results-matches"); 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._matchesElement.setAttribute("for", "search-input-field"); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 63591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._searchNavigationElement = this._searchControlElement.createChild("div", "toolbar-search-navigation-controls"); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 65591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._searchNavigationPrevElement = this._searchNavigationElement.createChild("div", "toolbar-search-navigation toolbar-search-navigation-prev"); 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchNavigationPrevElement.addEventListener("click", this._onPrevButtonSearch.bind(this), false); 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchNavigationPrevElement.title = WebInspector.UIString("Search Previous"); 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 69591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._searchNavigationNextElement = this._searchNavigationElement.createChild("div", "toolbar-search-navigation toolbar-search-navigation-next"); 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchNavigationNextElement.addEventListener("click", this._onNextButtonSearch.bind(this), false); 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchNavigationNextElement.title = WebInspector.UIString("Search Next"); 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchInputElement.addEventListener("mousedown", this._onSearchFieldManualFocus.bind(this), false); // when the search field is manually selected 7406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) this._searchInputElement.addEventListener("keydown", this._onSearchKeyDown.bind(this), true); 75591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._searchInputElement.addEventListener("input", this._onInput.bind(this), false); 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceInputElement = this._secondRowElement.createChild("td").createChild("input", "search-replace toolbar-replace-control"); 7806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) this._replaceInputElement.addEventListener("keydown", this._onReplaceKeyDown.bind(this), true); 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceInputElement.placeholder = WebInspector.UIString("Replace"); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Column 2 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._findButtonElement = this._firstRowElement.createChild("td").createChild("button", "hidden"); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._findButtonElement.textContent = WebInspector.UIString("Find"); 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._findButtonElement.tabIndex = -1; 85a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._findButtonElement.addEventListener("click", this._onFindClick.bind(this), false); 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceButtonElement = this._secondRowElement.createChild("td").createChild("button"); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceButtonElement.textContent = WebInspector.UIString("Replace"); 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceButtonElement.disabled = true; 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceButtonElement.tabIndex = -1; 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceButtonElement.addEventListener("click", this._replace.bind(this), false); 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Column 3 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._prevButtonElement = this._firstRowElement.createChild("td").createChild("button", "hidden"); 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._prevButtonElement.textContent = WebInspector.UIString("Previous"); 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._prevButtonElement.tabIndex = -1; 97a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._prevButtonElement.addEventListener("click", this._onPreviousClick.bind(this), false); 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceAllButtonElement = this._secondRowElement.createChild("td").createChild("button"); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceAllButtonElement.textContent = WebInspector.UIString("Replace All"); 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceAllButtonElement.addEventListener("click", this._replaceAll.bind(this), false); 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Column 4 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceElement = this._firstRowElement.createChild("td").createChild("span"); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceCheckboxElement = this._replaceElement.createChild("input"); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceCheckboxElement.type = "checkbox"; 1086f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch this._uniqueId = ++WebInspector.SearchableView._lastUniqueId; 1096f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch var replaceCheckboxId = "search-replace-trigger" + this._uniqueId; 1106f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch this._replaceCheckboxElement.id = replaceCheckboxId; 11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._replaceCheckboxElement.addEventListener("change", this._updateSecondRowVisibility.bind(this), false); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceLabelElement = this._replaceElement.createChild("label"); 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceLabelElement.textContent = WebInspector.UIString("Replace"); 1156f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch this._replaceLabelElement.setAttribute("for", replaceCheckboxId); 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Column 5 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var cancelButtonElement = this._firstRowElement.createChild("td").createChild("button"); 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cancelButtonElement.textContent = WebInspector.UIString("Cancel"); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cancelButtonElement.tabIndex = -1; 121591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch cancelButtonElement.addEventListener("click", this.closeSearch.bind(this), false); 12251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._minimalSearchQuerySize = 3; 12351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 12451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._registerShortcuts(); 12551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 12651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 1276f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochWebInspector.SearchableView._lastUniqueId = 0; 1286f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 1295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/** 1305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} 1315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 13251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)WebInspector.SearchableView.findShortcuts = function() 13351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 13451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (WebInspector.SearchableView._findShortcuts) 13551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return WebInspector.SearchableView._findShortcuts; 13651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebInspector.SearchableView._findShortcuts = [WebInspector.KeyboardShortcut.makeDescriptor("f", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)]; 13751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!WebInspector.isMac()) 13851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebInspector.SearchableView._findShortcuts.push(WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F3)); 13951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return WebInspector.SearchableView._findShortcuts; 14051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 14151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 1425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/** 1435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} 1445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 14551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)WebInspector.SearchableView.cancelSearchShortcuts = function() 14651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 14751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (WebInspector.SearchableView._cancelSearchShortcuts) 14851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return WebInspector.SearchableView._cancelSearchShortcuts; 14951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebInspector.SearchableView._cancelSearchShortcuts = [WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Esc)]; 15051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return WebInspector.SearchableView._cancelSearchShortcuts; 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/** 1545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} 1555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 15651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)WebInspector.SearchableView.findNextShortcut = function() 15751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 15851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (WebInspector.SearchableView._findNextShortcut) 15951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return WebInspector.SearchableView._findNextShortcut; 16051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebInspector.SearchableView._findNextShortcut = []; 16143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (WebInspector.isMac()) 16243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) WebInspector.SearchableView._findNextShortcut.push(WebInspector.KeyboardShortcut.makeDescriptor("g", WebInspector.KeyboardShortcut.Modifiers.Meta)); 16351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return WebInspector.SearchableView._findNextShortcut; 16451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 16551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 1665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/** 1675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} 1685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 16951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)WebInspector.SearchableView.findPreviousShortcuts = function() 17051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 17151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (WebInspector.SearchableView._findPreviousShortcuts) 17251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return WebInspector.SearchableView._findPreviousShortcuts; 17351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebInspector.SearchableView._findPreviousShortcuts = []; 17443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (WebInspector.isMac()) 17543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) WebInspector.SearchableView._findPreviousShortcuts.push(WebInspector.KeyboardShortcut.makeDescriptor("g", WebInspector.KeyboardShortcut.Modifiers.Meta | WebInspector.KeyboardShortcut.Modifiers.Shift)); 17651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return WebInspector.SearchableView._findPreviousShortcuts; 17751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 17851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 17951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)WebInspector.SearchableView.prototype = { 180591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 181a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @return {!Element} 182a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch */ 183a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch defaultFocusedElement: function() 184a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 185a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var children = this.children(); 186a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch for (var i = 0; i < children.length; ++i) { 187a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var element = children[i].defaultFocusedElement(); 188a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (element) 189a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return element; 190a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 191a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return WebInspector.View.prototype.defaultFocusedElement.call(this); 192a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 193a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 194a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch /** 195d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * @param {?Event} event 196591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 19751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) _onKeyDown: function(event) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 199d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) var shortcutKey = WebInspector.KeyboardShortcut.makeKeyFromEvent(/**@type {!KeyboardEvent}*/(event)); 20051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) var handler = this._shortcuts[shortcutKey]; 20151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (handler && handler(event)) 20251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) event.consume(true); 20351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) }, 204591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 20551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) _registerShortcuts: function() 20651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 20751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._shortcuts = {}; 20851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 20909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 21009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} shortcuts 21109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {function()} handler 21209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.SearchableView} 21309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 21451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) function register(shortcuts, handler) 21551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 21651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) for (var i = 0; i < shortcuts.length; ++i) 21751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._shortcuts[shortcuts[i].key] = handler; 21851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 21951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 22051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) register.call(this, WebInspector.SearchableView.findShortcuts(), this.handleFindShortcut.bind(this)); 22151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) register.call(this, WebInspector.SearchableView.cancelSearchShortcuts(), this.handleCancelSearchShortcut.bind(this)); 22251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) register.call(this, WebInspector.SearchableView.findNextShortcut(), this.handleFindNextShortcut.bind(this)); 22351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) register.call(this, WebInspector.SearchableView.findPreviousShortcuts(), this.handleFindPreviousShortcut.bind(this)); 22451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) }, 22551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 22651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) /** 22751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {number} minimalSearchQuerySize 22851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) */ 22951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setMinimalSearchQuerySize: function(minimalSearchQuerySize) 23051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 23151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._minimalSearchQuerySize = minimalSearchQuerySize; 23251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) }, 23351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 23451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) /** 23509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {boolean} replaceable 23651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) */ 23709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setReplaceable: function(replaceable) 23851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 23909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._replaceable = replaceable; 24051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) }, 24151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 24251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) /** 24351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {number} matches 24451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) */ 24551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) updateSearchMatchesCount: function(matches) 24651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 24751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._searchProvider.currentSearchMatches = matches; 24851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._updateSearchMatchesCountAndCurrentMatchIndex(this._searchProvider.currentQuery ? matches : 0, -1); 249591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 251591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 252591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {number} currentMatchIndex 253591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 25451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) updateCurrentMatchIndex: function(currentMatchIndex) 255591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 25651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._updateSearchMatchesCountAndCurrentMatchIndex(this._searchProvider.currentSearchMatches, currentMatchIndex); 257591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 26009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 26109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 262591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch isSearchVisible: function() 263591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 264591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return this._searchIsVisible; 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 267591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch closeSearch: function() 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 269591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.cancelSearch(); 27009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (WebInspector.currentFocusElement().isDescendant(this._footerElementContainer)) 271a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this.focus(); 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) _toggleSearchBar: function(toggled) 27551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 276d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._footerElementContainer.classList.toggle("hidden", !toggled); 27751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this.doResize(); 27851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) }, 27951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cancelSearch: function() 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._searchIsVisible) 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 284f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) this.resetSearch(); 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._searchIsVisible; 28651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._toggleSearchBar(false); 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resetSearch: function() 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 291591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._clearSearch(); 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._updateReplaceVisibility(); 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._matchesElement.textContent = ""; 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {boolean} 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 29951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) handleFindNextShortcut: function() 30051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 30151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!this._searchIsVisible) 30209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return false; 30309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._searchProvider.jumpToNextSearchResult(); 30451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return true; 30551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) }, 30651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 30751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) /** 30851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @return {boolean} 30951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) */ 31051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) handleFindPreviousShortcut: function() 31151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 31251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!this._searchIsVisible) 31309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return false; 31409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._searchProvider.jumpToPreviousSearchResult(); 31551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return true; 31651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) }, 31751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 31851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) /** 31951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @return {boolean} 32051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) */ 32151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) handleFindShortcut: function() 32251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 32351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this.showSearchField(); 32451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return true; 32551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) }, 32651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 32751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) /** 32851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @return {boolean} 32951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) */ 33051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) handleCancelSearchShortcut: function() 33151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 33251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!this._searchIsVisible) 33351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return false; 33451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this.closeSearch(); 33551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return true; 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 338591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 339591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {boolean} enabled 340591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _updateSearchNavigationButtonState: function(enabled) 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceButtonElement.disabled = !enabled; 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (enabled) { 345a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._searchNavigationPrevElement.classList.add("enabled"); 346a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._searchNavigationNextElement.classList.add("enabled"); 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 348a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._searchNavigationPrevElement.classList.remove("enabled"); 349a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._searchNavigationNextElement.classList.remove("enabled"); 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} matches 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} currentMatchIndex 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _updateSearchMatchesCountAndCurrentMatchIndex: function(matches, currentMatchIndex) 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 359591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!this._currentQuery) 360591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._matchesElement.textContent = ""; 361591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch else if (matches === 0 || currentMatchIndex >= 0) 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._matchesElement.textContent = WebInspector.UIString("%d of %d", currentMatchIndex + 1, matches); 363591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch else if (matches === 1) 364591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._matchesElement.textContent = WebInspector.UIString("1 match"); 365591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch else 366591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._matchesElement.textContent = WebInspector.UIString("%d matches", matches); 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._updateSearchNavigationButtonState(matches > 0); 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) showSearchField: function() 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 372591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._searchIsVisible) 373591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.cancelSearch(); 374591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 375f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu var queryCandidate; 376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (WebInspector.currentFocusElement() !== this._searchInputElement) { 377926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var selection = window.getSelection(); 378f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (selection.rangeCount) 379f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu queryCandidate = selection.toString().replace(/\r?\n.*/, ""); 380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 381f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 382f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu this._toggleSearchBar(true); 383f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu this._updateReplaceVisibility(); 384f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (queryCandidate) 385f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu this._searchInputElement.value = queryCandidate; 386591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._performSearch(false, false); 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchInputElement.focus(); 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchInputElement.select(); 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchIsVisible = true; 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _updateReplaceVisibility: function() 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 394d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._replaceElement.classList.toggle("hidden", !this._replaceable); 39509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!this._replaceable) { 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceCheckboxElement.checked = false; 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._updateSecondRowVisibility(); 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 401591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 4025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {?Event} event 403591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _onSearchFieldManualFocus: function(event) 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.setCurrentFocusElement(event.target); 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 409591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 4105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {?Event} event 411591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 41206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) _onSearchKeyDown: function(event) 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 414a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (!isEnterKey(event)) 415a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return; 416a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 417a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (!this._currentQuery) 418a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._performSearch(true, true, event.shiftKey); 419a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch else 420a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._jumpToNextSearchResult(event.shiftKey); 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 423591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 4245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {?Event} event 42506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) */ 42606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) _onReplaceKeyDown: function(event) 42706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) { 42806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) if (isEnterKey(event)) 42906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) this._replace(); 43006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) }, 43106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 43206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) /** 433591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {boolean=} isBackwardSearch 434591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 435591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _jumpToNextSearchResult: function(isBackwardSearch) 436591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 437a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!this._currentQuery || !this._searchNavigationPrevElement.classList.contains("enabled")) 438591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return; 439591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 440591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (isBackwardSearch) 441591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._searchProvider.jumpToPreviousSearchResult(); 442591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch else 443591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._searchProvider.jumpToNextSearchResult(); 444591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 445591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _onNextButtonSearch: function(event) 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 448a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!this._searchNavigationNextElement.classList.contains("enabled")) 449591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return; 450591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._jumpToNextSearchResult(); 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchInputElement.focus(); 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _onPrevButtonSearch: function(event) 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 456a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!this._searchNavigationPrevElement.classList.contains("enabled")) 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 458591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._jumpToNextSearchResult(true); 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchInputElement.focus(); 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 462a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch _onFindClick: function(event) 463a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 464a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (!this._currentQuery) 465a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._performSearch(true, true); 466a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch else 467a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._jumpToNextSearchResult(); 468a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._searchInputElement.focus(); 469a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 470a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 471a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch _onPreviousClick: function(event) 472a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 473a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (!this._currentQuery) 474a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._performSearch(true, true, true); 475a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch else 476a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._jumpToNextSearchResult(true); 477a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._searchInputElement.focus(); 478a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 479a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 480591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _clearSearch: function() 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 482591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._currentQuery; 48351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!!this._searchProvider.currentQuery) { 48451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) delete this._searchProvider.currentQuery; 48551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._searchProvider.searchCanceled(); 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 487591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._updateSearchMatchesCountAndCurrentMatchIndex(0, -1); 488591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 490591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 491591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {boolean} forceSearch 492591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {boolean} shouldJump 493a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {boolean=} jumpBackwards 494591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 495a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch _performSearch: function(forceSearch, shouldJump, jumpBackwards) 496591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 497591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var query = this._searchInputElement.value; 49851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!query || (!forceSearch && query.length < this._minimalSearchQuerySize && !this._currentQuery)) { 499591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._clearSearch(); 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentQuery = query; 504591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._searchProvider.currentQuery = query; 505a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._searchProvider.performSearch(query, shouldJump, jumpBackwards); 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _updateSecondRowVisibility: function() 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 510d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var secondRowVisible = this._replaceCheckboxElement.checked; 511d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._footerElementContainer.classList.toggle("replaceable", secondRowVisible); 512d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._footerElement.classList.toggle("toolbar-search-replace", secondRowVisible); 513d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._secondRowElement.classList.toggle("hidden", !secondRowVisible); 514d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._prevButtonElement.classList.toggle("hidden", !secondRowVisible); 515d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._findButtonElement.classList.toggle("hidden", !secondRowVisible); 516d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._replaceCheckboxElement.tabIndex = secondRowVisible ? -1 : 0; 517d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 518d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (secondRowVisible) 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._replaceInputElement.focus(); 520d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) else 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchInputElement.focus(); 522a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this.doResize(); 5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _replace: function() 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 52709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** @type {!WebInspector.Replaceable} */ (this._searchProvider).replaceSelectionWith(this._replaceInputElement.value); 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._currentQuery; 529591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._performSearch(true, true); 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _replaceAll: function() 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 53409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** @type {!WebInspector.Replaceable} */ (this._searchProvider).replaceAllWith(this._searchInputElement.value, this._replaceInputElement.value); 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 536591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 537591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _onInput: function(event) 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 53906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) this._onValueChanged(); 54006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) }, 54106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 54206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) _onValueChanged: function() 54306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) { 544f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) this._performSearch(false, true); 54551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) }, 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 547d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.VBox.prototype 54851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 549591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 550591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch/** 551591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @interface 552591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 553591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochWebInspector.Searchable = function() 554591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch{ 555591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch} 556591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 557591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochWebInspector.Searchable.prototype = { 558591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch searchCanceled: function() { }, 559591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 560591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 561591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 562591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {boolean} shouldJump 563a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {boolean=} jumpBackwards 564591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 565a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch performSearch: function(query, shouldJump, jumpBackwards) { }, 566591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 56751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) jumpToNextSearchResult: function() { }, 568591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 56909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) jumpToPreviousSearchResult: function() { } 57009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 57109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 57209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)/** 57309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @interface 57409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 57509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.Replaceable = function() 57609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 57709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 57809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 57909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.Replaceable.prototype = { 58009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 58109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {string} text 58209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 58309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) replaceSelectionWith: function(text) { }, 58409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 58509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 58609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {string} query 58709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {string} replacement 58809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 58909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) replaceAllWith: function(query, replacement) { } 590591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch} 591