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) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.DialogDelegate} 34926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @implements {WebInspector.ViewportControl.Provider} 35a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.SelectionDialogContentProvider} delegate 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FilteredItemSelectionDialog = function(delegate) 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.DialogDelegate.call(this); 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var xhr = new XMLHttpRequest(); 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) xhr.open("GET", "filteredItemSelectionDialog.css", false); 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) xhr.send(null); 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element = document.createElement("div"); 46926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.element.className = "filtered-item-list-dialog"; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.addEventListener("keydown", this._onKeyDown.bind(this), false); 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var styleElement = this.element.createChild("style"); 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) styleElement.type = "text/css"; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) styleElement.textContent = xhr.responseText; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._promptElement = this.element.createChild("input", "monospace"); 5353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._promptElement.addEventListener("input", this._onInput.bind(this), false); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._promptElement.type = "text"; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._promptElement.setAttribute("spellcheck", "false"); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._filteredItems = []; 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._viewportControl = new WebInspector.ViewportControl(this); 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._itemElementsContainer = this._viewportControl.element; 60a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._itemElementsContainer.classList.add("container"); 61a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._itemElementsContainer.classList.add("monospace"); 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._itemElementsContainer.addEventListener("click", this._onClick.bind(this), false); 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.appendChild(this._itemElementsContainer); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._delegate = delegate; 66591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._delegate.setRefreshCallback(this._itemsLoaded.bind(this)); 67591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._itemsLoaded(); 688abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 698abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this._shouldShowMatchingItems = true; 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FilteredItemSelectionDialog.prototype = { 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 74a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} element 75a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} relativeToElement 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) position: function(element, relativeToElement) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const minWidth = 500; 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const minHeight = 204; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var width = Math.max(relativeToElement.offsetWidth * 2 / 3, minWidth); 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var height = Math.max(relativeToElement.offsetHeight * 2 / 3, minHeight); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.style.width = width + "px"; 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const shadowPadding = 20; // shadow + padding 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element.positionAt( 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) relativeToElement.totalOffsetLeft() + Math.max((relativeToElement.offsetWidth - width - 2 * shadowPadding) / 2, shadowPadding), 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) relativeToElement.totalOffsetTop() + Math.max((relativeToElement.offsetHeight - height - 2 * shadowPadding) / 2, shadowPadding)); 908abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this._dialogHeight = height; 918abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 928abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this._updateShowMatchingItems(); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) focus: function() 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.setCurrentFocusElement(this._promptElement); 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (this._filteredItems.length && this._viewportControl.lastVisibleIndex() === -1) 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._viewportControl.refresh(); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) willHide: function() 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._isHiding) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._isHiding = true; 107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._delegate.dispose(); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._filterTimer) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) clearTimeout(this._filterTimer); 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) renderAsTwoRows: function() 113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._renderAsTwoRows = true; 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onEnter: function() 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 119591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!this._delegate.itemCount()) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._delegate.selectItem(this._filteredItems[this._selectedIndexInFiltered], this._promptElement.value.trim()); 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 124591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _itemsLoaded: function() 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (this._loadTimeout) 128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 129591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._loadTimeout = setTimeout(this._updateAfterItemsLoaded.bind(this), 0); 130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _updateAfterItemsLoaded: function() 133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) delete this._loadTimeout; 135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._filterItems(); 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} index 140a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!Element} 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _createItemElement: function(index) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var itemElement = document.createElement("div"); 145926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) itemElement.className = "filtered-item-list-dialog-item " + (this._renderAsTwoRows ? "two-rows" : "one-row"); 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) itemElement._titleElement = itemElement.createChild("span"); 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) itemElement._titleSuffixElement = itemElement.createChild("span"); 148926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) itemElement._subtitleElement = itemElement.createChild("div", "filtered-item-list-dialog-subtitle"); 149591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemElement._subtitleElement.textContent = "\u200B"; 150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) itemElement._index = index; 151591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._delegate.renderItem(index, this._promptElement.value.trim(), itemElement._titleElement, itemElement._subtitleElement); 152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return itemElement; 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 156926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} query 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setQuery: function(query) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 160926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._promptElement.value = query; 161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._scheduleFilter(); 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _filterItems: function() 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._filterTimer; 167591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._scoringTimer) { 168591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch clearTimeout(this._scoringTimer); 169591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._scoringTimer; 170591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 172926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var query = this._delegate.rewriteQuery(this._promptElement.value.trim()); 173926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._query = query; 174591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var queryLength = query.length; 175591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var filterRegex = query ? WebInspector.FilePathScoreFunction.filterRegex(query) : null; 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var oldSelectedAbsoluteIndex = this._selectedIndexInFiltered ? this._filteredItems[this._selectedIndexInFiltered] : null; 178591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var filteredItems = []; 179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._selectedIndexInFiltered = 0; 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 181591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var bestScores = []; 182591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var bestItems = []; 183591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var bestItemsToCollect = 100; 184591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var minBestScore = 0; 185591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var overflowItems = []; 186926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 187591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch scoreItems.call(this, 0); 1885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1897757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch /** 1907757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch * @param {number} a 1917757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch * @param {number} b 1927757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch * @return {number} 1937757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch */ 194591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function compareIntegers(a, b) 195591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 1967757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return b - a; 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 199e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles) /** 200e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles) * @param {number} fromIndex 201e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles) * @this {WebInspector.FilteredItemSelectionDialog} 202e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles) */ 203591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function scoreItems(fromIndex) 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 205591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var maxWorkItems = 1000; 206591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var workDone = 0; 207591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = fromIndex; i < this._delegate.itemCount() && workDone < maxWorkItems; ++i) { 208591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // Filter out non-matching items quickly. 209591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (filterRegex && !filterRegex.test(this._delegate.itemKeyAt(i))) 210591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch continue; 211591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 212591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // Score item. 213591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var score = this._delegate.itemScoreAt(i, query); 214591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (query) 215591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch workDone++; 216591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 217591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // Find its index in the scores array (earlier elements have bigger scores). 218591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (score > minBestScore || bestScores.length < bestItemsToCollect) { 219591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var index = insertionIndexForObjectInListSortedByFunction(score, bestScores, compareIntegers, true); 220591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bestScores.splice(index, 0, score); 221591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bestItems.splice(index, 0, i); 222591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (bestScores.length > bestItemsToCollect) { 223591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // Best list is too large -> drop last elements. 224591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch overflowItems.push(bestItems.peekLast()); 225591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bestScores.length = bestItemsToCollect; 226591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bestItems.length = bestItemsToCollect; 227591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 2287757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch minBestScore = bestScores.peekLast(); 229591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } else 230591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch filteredItems.push(i); 231926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 233591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // Process everything in chunks. 234591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (i < this._delegate.itemCount()) { 235591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._scoringTimer = setTimeout(scoreItems.bind(this, i), 0); 236591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return; 237591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 238591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._scoringTimer; 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 240591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._filteredItems = bestItems.concat(overflowItems).concat(filteredItems); 241591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = 0; i < this._filteredItems.length; ++i) { 242591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._filteredItems[i] === oldSelectedAbsoluteIndex) { 243591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._selectedIndexInFiltered = i; 244591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch break; 245591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 247591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._viewportControl.refresh(); 248591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!query) 249591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._selectedIndexInFiltered = 0; 250591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._updateSelection(this._selectedIndexInFiltered, false); 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 252926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _onInput: function(event) 25553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 2568abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this._shouldShowMatchingItems = this._delegate.shouldShowMatchingItems(this._promptElement.value); 2578abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this._updateShowMatchingItems(); 25853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._scheduleFilter(); 25953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 26053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 2618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) _updateShowMatchingItems: function() 2628abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 2638abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this._itemElementsContainer.enableStyleClass("hidden", !this._shouldShowMatchingItems); 2648abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this.element.style.height = this._shouldShowMatchingItems ? this._dialogHeight + "px" : "auto"; 2658abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) }, 2668abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _onKeyDown: function(event) 268926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 269926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var newSelectedIndex = this._selectedIndexInFiltered; 270926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 271926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) switch (event.keyCode) { 272926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case WebInspector.KeyboardShortcut.Keys.Down.code: 273926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (++newSelectedIndex >= this._filteredItems.length) 274926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) newSelectedIndex = this._filteredItems.length - 1; 275926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._updateSelection(newSelectedIndex, true); 276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) event.consume(true); 277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case WebInspector.KeyboardShortcut.Keys.Up.code: 279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (--newSelectedIndex < 0) 280926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) newSelectedIndex = 0; 281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._updateSelection(newSelectedIndex, false); 282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) event.consume(true); 283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case WebInspector.KeyboardShortcut.Keys.PageDown.code: 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) newSelectedIndex = Math.min(newSelectedIndex + this._viewportControl.rowsPerViewport(), this._filteredItems.length - 1); 286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._updateSelection(newSelectedIndex, true); 287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) event.consume(true); 288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case WebInspector.KeyboardShortcut.Keys.PageUp.code: 290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) newSelectedIndex = Math.max(newSelectedIndex - this._viewportControl.rowsPerViewport(), 0); 291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._updateSelection(newSelectedIndex, false); 292926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) event.consume(true); 293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) default: 295926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _scheduleFilter: function() 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._filterTimer) 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._filterTimer = setTimeout(this._filterItems.bind(this), 0); 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} index 307926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {boolean} makeLast 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 309926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _updateSelection: function(index, makeLast) 310926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 311926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var element = this._viewportControl.renderedElementAt(this._selectedIndexInFiltered); 312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (element) 313a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) element.classList.remove("selected"); 314926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._viewportControl.scrollItemIntoView(index, makeLast); 315926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._selectedIndexInFiltered = index; 316926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) element = this._viewportControl.renderedElementAt(index); 317926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (element) 318a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) element.classList.add("selected"); 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _onClick: function(event) 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 323926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var itemElement = event.target.enclosingNodeOrSelfWithClass("filtered-item-list-dialog-item"); 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!itemElement) 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 326926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._delegate.selectItem(itemElement._index, this._promptElement.value.trim()); 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.Dialog.hide(); 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 331926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {number} 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 333926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) itemCount: function() 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 335926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._filteredItems.length; 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} index 340a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!Element} 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 342926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) itemElement: function(index) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 344926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var delegateIndex = this._filteredItems[index]; 345926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var element = this._createItemElement(delegateIndex); 346591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (index === this._selectedIndexInFiltered) 347a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) element.classList.add("selected"); 348926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return element; 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __proto__: WebInspector.DialogDelegate.prototype 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 355591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @constructor 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SelectionDialogContentProvider = function() 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SelectionDialogContentProvider.prototype = { 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 363591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {function():void} refreshCallback 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 365591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch setRefreshCallback: function(refreshCallback) 366591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 367591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._refreshCallback = refreshCallback; 368591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 370591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 3718abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @param {string} query 3728abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @return {boolean} 3738abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) */ 3748abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) shouldShowMatchingItems: function(query) 3758abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 3768abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return true; 3778abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) }, 3788abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 3798abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) /** 380591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @return {number} 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 382591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemCount: function() 383591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 384591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return 0; 385591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} itemIndex 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 391591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemKeyAt: function(itemIndex) 392591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 393591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return ""; 394591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 3975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {number} itemIndex 398591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 3995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @return {number} 4005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 401591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemScoreAt: function(itemIndex, query) 402591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 403591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return 1; 404591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 407591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {number} itemIndex 408591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 409a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} titleElement 410a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} subtitleElement 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 412591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch renderItem: function(itemIndex, query, titleElement, subtitleElement) 413591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 414591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 417a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} element 418591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 419591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @return {boolean} 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 421591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch highlightRanges: function(element, query) 422591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 423591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!query) 424591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 425591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 426591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 427591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} text 428591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 429a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {?Array.<!WebInspector.SourceRange>} 430591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 431591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function rangesForMatch(text, query) 432591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 433591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var sm = new difflib.SequenceMatcher(query, text); 434591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var opcodes = sm.get_opcodes(); 435591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var ranges = []; 436591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 437591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = 0; i < opcodes.length; ++i) { 438591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var opcode = opcodes[i]; 439591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (opcode[0] === "equal") 440a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) ranges.push(new WebInspector.SourceRange(opcode[3], opcode[4] - opcode[3])); 441591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch else if (opcode[0] !== "insert") 442591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return null; 443591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 444591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return ranges; 445591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 446591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 447591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var text = element.textContent; 448591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var ranges = rangesForMatch(text, query); 449591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!ranges) 450591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch ranges = rangesForMatch(text.toUpperCase(), query.toUpperCase()); 451591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (ranges) { 452591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebInspector.highlightRangesWithStyleClass(element, ranges, "highlight"); 453591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return true; 454591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 455591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 456591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} itemIndex 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} promptValue 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 462591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch selectItem: function(itemIndex, promptValue) 463591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 464591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 465591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 466591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch refresh: function() 467591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 468591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._refreshCallback(); 469591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} query 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 475591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch rewriteQuery: function(query) 476591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 477591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return query; 478591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 479926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 480591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch dispose: function() 481591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 482591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 487591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @extends {WebInspector.SelectionDialogContentProvider} 488a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.View} view 489a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ContentProvider} contentProvider 49051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {function(number, number)} selectItemCallback 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 49251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)WebInspector.JavaScriptOutlineDialog = function(view, contentProvider, selectItemCallback) 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.SelectionDialogContentProvider.call(this); 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._functionItems = []; 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._view = view; 49851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._selectItemCallback = selectItemCallback; 499591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch contentProvider.requestContent(this._contentAvailable.bind(this)); 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 503a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.View} view 504a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ContentProvider} contentProvider 50551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {function(number, number)} selectItemCallback 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 50751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)WebInspector.JavaScriptOutlineDialog.show = function(view, contentProvider, selectItemCallback) 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (WebInspector.Dialog.currentInstance()) 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 51151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(new WebInspector.JavaScriptOutlineDialog(view, contentProvider, selectItemCallback)); 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.Dialog.show(view.element, filteredItemSelectionDialog); 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.JavaScriptOutlineDialog.prototype = { 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 517591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {?string} content 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 5191e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) _contentAvailable: function(content) 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 521591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._outlineWorker = new Worker("ScriptFormatterWorker.js"); 522591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._outlineWorker.onmessage = this._didBuildOutlineChunk.bind(this); 523591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch const method = "outline"; 524591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._outlineWorker.postMessage({ method: method, params: { content: content } }); 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 527591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _didBuildOutlineChunk: function(event) 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 529591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var data = event.data; 530591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var chunk = data["chunk"]; 531591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = 0; i < chunk.length; ++i) 532591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._functionItems.push(chunk[i]); 533591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 534591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (data.total === data.index) 535591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.dispose(); 536591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 537591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.refresh(); 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 540591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 541591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @return {number} 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 543591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemCount: function() 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 545591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return this._functionItems.length; 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} itemIndex 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) itemKeyAt: function(itemIndex) 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._functionItems[itemIndex].name; 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {number} itemIndex 559591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 5605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @return {number} 5615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 562591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemScoreAt: function(itemIndex, query) 5635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 564591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var item = this._functionItems[itemIndex]; 565591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return -item.line; 5665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }, 5675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 5685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 569591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {number} itemIndex 570591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 571a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} titleElement 572a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} subtitleElement 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 574591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch renderItem: function(itemIndex, query, titleElement, subtitleElement) 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 576591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var item = this._functionItems[itemIndex]; 577591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch titleElement.textContent = item.name + (item.arguments ? item.arguments : ""); 578591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.highlightRanges(titleElement, query); 579591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch subtitleElement.textContent = ":" + (item.line + 1); 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} itemIndex 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} promptValue 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selectItem: function(itemIndex, promptValue) 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lineNumber = this._functionItems[itemIndex].line; 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isNaN(lineNumber) && lineNumber >= 0) 59051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._selectItemCallback(lineNumber, this._functionItems[itemIndex].column); 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 593591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch dispose: function() 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 595591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._outlineWorker) { 596591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._outlineWorker.terminate(); 597591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._outlineWorker; 598591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 601591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch __proto__: WebInspector.SelectionDialogContentProvider.prototype 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 606591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @extends {WebInspector.SelectionDialogContentProvider} 607a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Map.<!WebInspector.UISourceCode, number>=} defaultScores 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 6095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)WebInspector.SelectUISourceCodeDialog = function(defaultScores) 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 611591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebInspector.SelectionDialogContentProvider.call(this); 612591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 6137757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch /** @type {!Array.<!WebInspector.UISourceCode>} */ 614926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._uiSourceCodes = []; 615591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var projects = WebInspector.workspace.projects().filter(this.filterProject.bind(this)); 616926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < projects.length; ++i) 617e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch this._uiSourceCodes = this._uiSourceCodes.concat(projects[i].uiSourceCodes()); 6185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) this._defaultScores = defaultScores; 619591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._scorer = new WebInspector.FilePathScoreFunction(""); 620591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebInspector.workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAdded, this); 621926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 623926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.SelectUISourceCodeDialog.prototype = { 624926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 625a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {?WebInspector.UISourceCode} uiSourceCode 62653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number=} lineNumber 627926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 628926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) uiSourceCodeSelected: function(uiSourceCode, lineNumber) 629926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 630926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Overridden by subclasses 631926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 633926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 634a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Project} project 635926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 636926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filterProject: function(project) 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 638926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return true; 639926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Overridden by subclasses 640926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 642926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 643591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @return {number} 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 645591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemCount: function() 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 647591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return this._uiSourceCodes.length; 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} itemIndex 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) itemKeyAt: function(itemIndex) 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 656e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return this._uiSourceCodes[itemIndex].fullDisplayName(); 6575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }, 6585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 6595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 6605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {number} itemIndex 661591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 6625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @return {number} 6635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 664591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemScoreAt: function(itemIndex, query) 6655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 666591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var uiSourceCode = this._uiSourceCodes[itemIndex]; 667591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var score = this._defaultScores ? (this._defaultScores.get(uiSourceCode) || 0) : 0; 668591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!query || query.length < 2) 669591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return score; 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 671591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._query !== query) { 672591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._query = query; 673591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._scorer = new WebInspector.FilePathScoreFunction(query); 674591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 675591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 676e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch var path = uiSourceCode.fullDisplayName(); 677591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return score + 10 * this._scorer.score(path, null); 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 681591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {number} itemIndex 682591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 683a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} titleElement 684a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} subtitleElement 685591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 686591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch renderItem: function(itemIndex, query, titleElement, subtitleElement) 687591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 688591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch query = this.rewriteQuery(query); 689591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var uiSourceCode = this._uiSourceCodes[itemIndex]; 690e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch titleElement.textContent = uiSourceCode.displayName() + (this._queryLineNumber ? this._queryLineNumber : ""); 691e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch subtitleElement.textContent = uiSourceCode.fullDisplayName().trimEnd(100); 692591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 693591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var indexes = []; 694e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch var score = new WebInspector.FilePathScoreFunction(query).score(subtitleElement.textContent, indexes); 695591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var fileNameIndex = subtitleElement.textContent.lastIndexOf("/"); 696591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var ranges = []; 697591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = 0; i < indexes.length; ++i) 698591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch ranges.push({offset: indexes[i], length: 1}); 699591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (indexes[0] > fileNameIndex) { 700591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = 0; i < ranges.length; ++i) 701591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch ranges[i].offset -= fileNameIndex + 1; 702591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return WebInspector.highlightRangesWithStyleClass(titleElement, ranges, "highlight"); 703591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } else { 704591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return WebInspector.highlightRangesWithStyleClass(subtitleElement, ranges, "highlight"); 705591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} itemIndex 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} promptValue 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selectItem: function(itemIndex, promptValue) 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7148abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (/^:\d+$/.test(promptValue.trimRight())) { 7158abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) var lineNumber = parseInt(promptValue.trimRight().substring(1), 10) - 1; 7168abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (!isNaN(lineNumber) && lineNumber >= 0) 7178abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this.uiSourceCodeSelected(null, lineNumber); 7188abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return; 7198abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) } 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lineNumberMatch = promptValue.match(/[^:]+\:([\d]*)$/); 72153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var lineNumber = lineNumberMatch ? Math.max(parseInt(lineNumberMatch[1], 10) - 1, 0) : undefined; 722926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.uiSourceCodeSelected(this._uiSourceCodes[itemIndex], lineNumber); 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} query 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rewriteQuery: function(query) 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!query) 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return query; 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) query = query.trim(); 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lineNumberMatch = query.match(/([^:]+)(\:[\d]*)$/); 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._queryLineNumber = lineNumberMatch ? lineNumberMatch[2] : ""; 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return lineNumberMatch ? lineNumberMatch[1] : query; 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 739926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 740a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Event} event 741926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 742926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _uiSourceCodeAdded: function(event) 743926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 744a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data); 745e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!this.filterProject(uiSourceCode.project())) 746926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 747926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._uiSourceCodes.push(uiSourceCode) 748591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.refresh(); 749926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 750926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 751926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) dispose: function() 752926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 753591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebInspector.workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAdded, this); 754591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 755591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 756591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch __proto__: WebInspector.SelectionDialogContentProvider.prototype 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 760926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 761926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.SelectUISourceCodeDialog} 762a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.SourcesPanel} panel 763a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Map.<!WebInspector.UISourceCode, number>=} defaultScores 764926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 7655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)WebInspector.OpenResourceDialog = function(panel, defaultScores) 766926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 7675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebInspector.SelectUISourceCodeDialog.call(this, defaultScores); 768926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._panel = panel; 769926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 770926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 771926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.OpenResourceDialog.prototype = { 772926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 773926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 7748abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @param {?WebInspector.UISourceCode} uiSourceCode 77553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number=} lineNumber 776926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 777926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) uiSourceCodeSelected: function(uiSourceCode, lineNumber) 778926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 7798abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (!uiSourceCode) 7808abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) uiSourceCode = this._panel.currentUISourceCode(); 7818abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (!uiSourceCode) 7828abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return; 783926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._panel.showUISourceCode(uiSourceCode, lineNumber); 784926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 785926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 786926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 7878abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @param {string} query 7888abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @return {boolean} 7898abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) */ 7908abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) shouldShowMatchingItems: function(query) 7918abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 7928abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return !query.startsWith(":"); 7938abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) }, 7948abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 7958abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) /** 796a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Project} project 797926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 798926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filterProject: function(project) 799926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 800926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return !project.isServiceProject(); 801926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 802926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 803926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.SelectUISourceCodeDialog.prototype 804926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 805926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 806926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 807a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.SourcesPanel} panel 808a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} relativeToElement 80953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {string=} name 810a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Map.<!WebInspector.UISourceCode, number>=} defaultScores 811926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 8125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)WebInspector.OpenResourceDialog.show = function(panel, relativeToElement, name, defaultScores) 813926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 814926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (WebInspector.Dialog.currentInstance()) 815926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 816926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 8175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(new WebInspector.OpenResourceDialog(panel, defaultScores)); 818926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filteredItemSelectionDialog.renderAsTwoRows(); 81953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (name) 82053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) filteredItemSelectionDialog.setQuery(name); 821926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.Dialog.show(relativeToElement, filteredItemSelectionDialog); 822926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 823926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 824926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 825926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 826926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.SelectUISourceCodeDialog} 827926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} type 828a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.UISourceCode)} callback 829926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 830926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.SelectUISourceCodeForProjectTypeDialog = function(type, callback) 831926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 832926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._type = type; 833926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.SelectUISourceCodeDialog.call(this); 834926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._callback = callback; 835926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 836926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 837926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.SelectUISourceCodeForProjectTypeDialog.prototype = { 838926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 839a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.UISourceCode} uiSourceCode 84053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number=} lineNumber 841926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 842926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) uiSourceCodeSelected: function(uiSourceCode, lineNumber) 843926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 844926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._callback(uiSourceCode); 845926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 846926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 847926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 848a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Project} project 849926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 850926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filterProject: function(project) 851926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 852926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return project.type() === this._type; 853926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 854926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 855926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.SelectUISourceCodeDialog.prototype 856926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 857926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 858926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 859926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} type 860a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.UISourceCode)} callback 861a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} relativeToElement 8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 863926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.SelectUISourceCodeForProjectTypeDialog.show = function(name, type, callback, relativeToElement) 8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (WebInspector.Dialog.currentInstance()) 8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 868926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(new WebInspector.SelectUISourceCodeForProjectTypeDialog(type, callback)); 869926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filteredItemSelectionDialog.setQuery(name); 870926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filteredItemSelectionDialog.renderAsTwoRows(); 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.Dialog.show(relativeToElement, filteredItemSelectionDialog); 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 873