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) 41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!WebInspector.FilteredItemSelectionDialog._stylesLoaded) { 42d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.View.createStyleElement("filteredItemSelectionDialog.css"); 43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.FilteredItemSelectionDialog._stylesLoaded = true; 44d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element = document.createElement("div"); 47926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.element.className = "filtered-item-list-dialog"; 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.addEventListener("keydown", this._onKeyDown.bind(this), false); 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._promptElement = this.element.createChild("input", "monospace"); 5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._promptElement.addEventListener("input", this._onInput.bind(this), false); 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._promptElement.type = "text"; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._promptElement.setAttribute("spellcheck", "false"); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._filteredItems = []; 56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._viewportControl = new WebInspector.ViewportControl(this); 57d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) this._viewportControl.element.classList.add("fill"); 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._itemElementsContainer = this._viewportControl.element; 59a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._itemElementsContainer.classList.add("container"); 60a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._itemElementsContainer.classList.add("monospace"); 61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._itemElementsContainer.addEventListener("click", this._onClick.bind(this), false); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.appendChild(this._itemElementsContainer); 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._delegate = delegate; 65591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._delegate.setRefreshCallback(this._itemsLoaded.bind(this)); 66591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._itemsLoaded(); 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FilteredItemSelectionDialog.prototype = { 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 71a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} element 72a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} relativeToElement 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) position: function(element, relativeToElement) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 76aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch const shadow = 10; 77aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch const shadowPadding = 20; // shadow + padding 78aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch var container = WebInspector.Dialog.modalHostView().element; 79aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch var preferredWidth = Math.max(relativeToElement.offsetWidth * 2 / 3, 500); 80aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch var width = Math.min(preferredWidth, container.offsetWidth - 2 * shadowPadding); 81aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch var preferredHeight = Math.max(relativeToElement.offsetHeight * 2 / 3, 204); 82aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch var height = Math.min(preferredHeight, container.offsetHeight - 2 * shadowPadding); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.style.width = width + "px"; 8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var box = relativeToElement.boxInWindow(window).relativeToElement(container); 86aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch var positionX = box.x + Math.max((box.width - width - 2 * shadowPadding) / 2, shadow); 87aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch positionX = Math.max(shadow, Math.min(container.offsetWidth - width - 2 * shadowPadding, positionX)); 88aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch var positionY = box.y + Math.max((box.height - height - 2 * shadowPadding) / 2, shadow); 89aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch positionY = Math.max(shadow, Math.min(container.offsetHeight - height - 2 * shadowPadding, positionY)); 9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) element.positionAt(positionX, positionY, container); 918abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this._dialogHeight = height; 928abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 938abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this._updateShowMatchingItems(); 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) focus: function() 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.setCurrentFocusElement(this._promptElement); 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (this._filteredItems.length && this._viewportControl.lastVisibleIndex() === -1) 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._viewportControl.refresh(); 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) willHide: function() 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._isHiding) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._isHiding = true; 108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._delegate.dispose(); 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._filterTimer) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) clearTimeout(this._filterTimer); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) renderAsTwoRows: function() 114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._renderAsTwoRows = true; 116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onEnter: function() 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 120591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!this._delegate.itemCount()) 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 12210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch var selectedIndex = this._shouldShowMatchingItems() && this._selectedIndexInFiltered < this._filteredItems.length ? this._filteredItems[this._selectedIndexInFiltered] : null; 12309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._delegate.selectItem(selectedIndex, this._promptElement.value.trim()); 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 126591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _itemsLoaded: function() 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (this._loadTimeout) 130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 131591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._loadTimeout = setTimeout(this._updateAfterItemsLoaded.bind(this), 0); 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _updateAfterItemsLoaded: function() 135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) delete this._loadTimeout; 137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._filterItems(); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} index 142a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!Element} 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _createItemElement: function(index) 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var itemElement = document.createElement("div"); 147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) itemElement.className = "filtered-item-list-dialog-item " + (this._renderAsTwoRows ? "two-rows" : "one-row"); 148d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) itemElement._titleElement = itemElement.createChild("div", "filtered-item-list-dialog-title"); 149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) itemElement._subtitleElement = itemElement.createChild("div", "filtered-item-list-dialog-subtitle"); 150591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemElement._subtitleElement.textContent = "\u200B"; 151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) itemElement._index = index; 152591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._delegate.renderItem(index, this._promptElement.value.trim(), itemElement._titleElement, itemElement._subtitleElement); 153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return itemElement; 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 157926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} query 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 159926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setQuery: function(query) 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._promptElement.value = query; 162926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._scheduleFilter(); 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _filterItems: function() 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._filterTimer; 168591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._scoringTimer) { 169591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch clearTimeout(this._scoringTimer); 170591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._scoringTimer; 171591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 173926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var query = this._delegate.rewriteQuery(this._promptElement.value.trim()); 174926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._query = query; 175591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var queryLength = query.length; 176591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var filterRegex = query ? WebInspector.FilePathScoreFunction.filterRegex(query) : null; 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 178926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var oldSelectedAbsoluteIndex = this._selectedIndexInFiltered ? this._filteredItems[this._selectedIndexInFiltered] : null; 179591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var filteredItems = []; 180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._selectedIndexInFiltered = 0; 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 182591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var bestScores = []; 183591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var bestItems = []; 184591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var bestItemsToCollect = 100; 185591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var minBestScore = 0; 186591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var overflowItems = []; 187926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 188591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch scoreItems.call(this, 0); 1895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1907757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch /** 1917757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch * @param {number} a 1927757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch * @param {number} b 1937757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch * @return {number} 1947757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch */ 195591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function compareIntegers(a, b) 196591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 1977757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return b - a; 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number} fromIndex 20209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.FilteredItemSelectionDialog} 20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 204591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function scoreItems(fromIndex) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 206591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var maxWorkItems = 1000; 207591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var workDone = 0; 208591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = fromIndex; i < this._delegate.itemCount() && workDone < maxWorkItems; ++i) { 209591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // Filter out non-matching items quickly. 210591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (filterRegex && !filterRegex.test(this._delegate.itemKeyAt(i))) 211591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch continue; 212591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 213591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // Score item. 214591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var score = this._delegate.itemScoreAt(i, query); 215591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (query) 216591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch workDone++; 217591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 218591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // Find its index in the scores array (earlier elements have bigger scores). 219591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (score > minBestScore || bestScores.length < bestItemsToCollect) { 220591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var index = insertionIndexForObjectInListSortedByFunction(score, bestScores, compareIntegers, true); 221591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bestScores.splice(index, 0, score); 222591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bestItems.splice(index, 0, i); 223591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (bestScores.length > bestItemsToCollect) { 224591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // Best list is too large -> drop last elements. 225591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch overflowItems.push(bestItems.peekLast()); 226591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bestScores.length = bestItemsToCollect; 227591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bestItems.length = bestItemsToCollect; 228591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 2297757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch minBestScore = bestScores.peekLast(); 230591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } else 231591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch filteredItems.push(i); 232926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 234591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // Process everything in chunks. 235591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (i < this._delegate.itemCount()) { 236591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._scoringTimer = setTimeout(scoreItems.bind(this, i), 0); 237591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return; 238591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 239591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._scoringTimer; 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 241591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._filteredItems = bestItems.concat(overflowItems).concat(filteredItems); 242591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = 0; i < this._filteredItems.length; ++i) { 243591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._filteredItems[i] === oldSelectedAbsoluteIndex) { 244591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._selectedIndexInFiltered = i; 245591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch break; 246591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 248d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) this._viewportControl.invalidate(); 249591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!query) 250591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._selectedIndexInFiltered = 0; 251591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._updateSelection(this._selectedIndexInFiltered, false); 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 253926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) /** 25643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) * @return {boolean} 25743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) */ 25843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) _shouldShowMatchingItems: function() 25943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) { 26043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return this._delegate.shouldShowMatchingItems(this._promptElement.value); 26143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) }, 26243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 26353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _onInput: function(event) 26453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 2658abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this._updateShowMatchingItems(); 26653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._scheduleFilter(); 26753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 26853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 2698abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) _updateShowMatchingItems: function() 2708abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 27143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) var shouldShowMatchingItems = this._shouldShowMatchingItems(); 27243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._itemElementsContainer.classList.toggle("hidden", !shouldShowMatchingItems); 27343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this.element.style.height = shouldShowMatchingItems ? this._dialogHeight + "px" : "auto"; 2748abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) }, 2758abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 276d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) /** 277d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * @return {number} 278d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) */ 279d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) _rowsPerViewport: function() 280d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) { 281d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return Math.floor(this._viewportControl.element.clientHeight / this._rowHeight); 282d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) }, 283d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _onKeyDown: function(event) 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var newSelectedIndex = this._selectedIndexInFiltered; 287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) switch (event.keyCode) { 289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case WebInspector.KeyboardShortcut.Keys.Down.code: 290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (++newSelectedIndex >= this._filteredItems.length) 291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) newSelectedIndex = this._filteredItems.length - 1; 292926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._updateSelection(newSelectedIndex, true); 293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) event.consume(true); 294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 295926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case WebInspector.KeyboardShortcut.Keys.Up.code: 296926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (--newSelectedIndex < 0) 297926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) newSelectedIndex = 0; 298926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._updateSelection(newSelectedIndex, false); 299926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) event.consume(true); 300926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case WebInspector.KeyboardShortcut.Keys.PageDown.code: 302d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) newSelectedIndex = Math.min(newSelectedIndex + this._rowsPerViewport(), this._filteredItems.length - 1); 303926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._updateSelection(newSelectedIndex, true); 304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) event.consume(true); 305926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case WebInspector.KeyboardShortcut.Keys.PageUp.code: 307d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) newSelectedIndex = Math.max(newSelectedIndex - this._rowsPerViewport(), 0); 308926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._updateSelection(newSelectedIndex, false); 309926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) event.consume(true); 310926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 311926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) default: 312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _scheduleFilter: function() 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._filterTimer) 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._filterTimer = setTimeout(this._filterItems.bind(this), 0); 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 323f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu * @param {number} index 324926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {boolean} makeLast 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 326926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _updateSelection: function(index, makeLast) 327f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu { 328926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var element = this._viewportControl.renderedElementAt(this._selectedIndexInFiltered); 329926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (element) 330a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) element.classList.remove("selected"); 331926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._viewportControl.scrollItemIntoView(index, makeLast); 332926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._selectedIndexInFiltered = index; 333926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) element = this._viewportControl.renderedElementAt(index); 334926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (element) 335a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) element.classList.add("selected"); 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _onClick: function(event) 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 340926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var itemElement = event.target.enclosingNodeOrSelfWithClass("filtered-item-list-dialog-item"); 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!itemElement) 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 343926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._delegate.selectItem(itemElement._index, this._promptElement.value.trim()); 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.Dialog.hide(); 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 348926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {number} 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 350926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) itemCount: function() 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._filteredItems.length; 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 356926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} index 357f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @return {number} 358f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 359f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) fastHeight: function(index) 360f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 361f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!this._rowHeight) { 362f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var delegateIndex = this._filteredItems[index]; 363f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var element = this._createItemElement(delegateIndex); 364f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._rowHeight = element.measurePreferredSize(this._viewportControl.contentElement()).height; 365f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 366f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return this._rowHeight; 367f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 368f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 369f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 370f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {number} index 371d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * @return {!WebInspector.ViewportElement} 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) itemElement: function(index) 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 375926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var delegateIndex = this._filteredItems[index]; 376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var element = this._createItemElement(delegateIndex); 377591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (index === this._selectedIndexInFiltered) 378a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) element.classList.add("selected"); 379f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return new WebInspector.StaticViewportElement(element); 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 382112db3b40c6242b0b82bd13eac6dbf33d29d95e2Bo Liu /** 383112db3b40c6242b0b82bd13eac6dbf33d29d95e2Bo Liu * @return {number} 384112db3b40c6242b0b82bd13eac6dbf33d29d95e2Bo Liu */ 385112db3b40c6242b0b82bd13eac6dbf33d29d95e2Bo Liu minimumRowHeight: function() 386112db3b40c6242b0b82bd13eac6dbf33d29d95e2Bo Liu { 387112db3b40c6242b0b82bd13eac6dbf33d29d95e2Bo Liu return this.fastHeight(0); 388112db3b40c6242b0b82bd13eac6dbf33d29d95e2Bo Liu }, 389112db3b40c6242b0b82bd13eac6dbf33d29d95e2Bo Liu 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __proto__: WebInspector.DialogDelegate.prototype 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 394591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @constructor 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SelectionDialogContentProvider = function() 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SelectionDialogContentProvider.prototype = { 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 402591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {function():void} refreshCallback 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 404591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch setRefreshCallback: function(refreshCallback) 405591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 406591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._refreshCallback = refreshCallback; 407591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 409591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 4108abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @param {string} query 4118abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @return {boolean} 4128abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) */ 4138abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) shouldShowMatchingItems: function(query) 4148abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 4158abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return true; 4168abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) }, 4178abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 4188abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) /** 419591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @return {number} 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 421591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemCount: function() 422591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 423591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return 0; 424591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} itemIndex 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 430591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemKeyAt: function(itemIndex) 431591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 432591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return ""; 433591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 4365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {number} itemIndex 437591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 4385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @return {number} 4395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 440591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemScoreAt: function(itemIndex, query) 441591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 442591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return 1; 443591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 446591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {number} itemIndex 447591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 448a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} titleElement 449a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} subtitleElement 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 451591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch renderItem: function(itemIndex, query, titleElement, subtitleElement) 452591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 453591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 456a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} element 457591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 458591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @return {boolean} 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 460591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch highlightRanges: function(element, query) 461591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 462591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!query) 463591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 464591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 465591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 466591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} text 467591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 468a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {?Array.<!WebInspector.SourceRange>} 469591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 470591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function rangesForMatch(text, query) 471591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 472591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var sm = new difflib.SequenceMatcher(query, text); 473591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var opcodes = sm.get_opcodes(); 474591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var ranges = []; 475591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 476591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = 0; i < opcodes.length; ++i) { 477591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var opcode = opcodes[i]; 478591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (opcode[0] === "equal") 479a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) ranges.push(new WebInspector.SourceRange(opcode[3], opcode[4] - opcode[3])); 480591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch else if (opcode[0] !== "insert") 481591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return null; 482591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 483591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return ranges; 484591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 485591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 486591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var text = element.textContent; 487591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var ranges = rangesForMatch(text, query); 488591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!ranges) 489591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch ranges = rangesForMatch(text.toUpperCase(), query.toUpperCase()); 490591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (ranges) { 491591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebInspector.highlightRangesWithStyleClass(element, ranges, "highlight"); 492591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return true; 493591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 494591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 495591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 49809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?number} itemIndex 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} promptValue 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 501591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch selectItem: function(itemIndex, promptValue) 502591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 503591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 504591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 505591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch refresh: function() 506591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 507591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._refreshCallback(); 508591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} query 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 514591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch rewriteQuery: function(query) 515591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 516591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return query; 517591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 518926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 519591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch dispose: function() 520591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 521591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 526591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @extends {WebInspector.SelectionDialogContentProvider} 52709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!WebInspector.UISourceCode} uiSourceCode 52851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {function(number, number)} selectItemCallback 5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 53007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.JavaScriptOutlineDialog = function(uiSourceCode, selectItemCallback) 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.SelectionDialogContentProvider.call(this); 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._functionItems = []; 53551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._selectItemCallback = selectItemCallback; 536f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu this._outlineWorker = new Worker("script_formatter_worker/ScriptFormatterWorker.js"); 53709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._outlineWorker.onmessage = this._didBuildOutlineChunk.bind(this); 53809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._outlineWorker.postMessage({ method: "javaScriptOutline", params: { content: uiSourceCode.workingCopy() } }); 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 542a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.View} view 54309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!WebInspector.UISourceCode} uiSourceCode 54451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {function(number, number)} selectItemCallback 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 54609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.JavaScriptOutlineDialog.show = function(view, uiSourceCode, selectItemCallback) 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (WebInspector.Dialog.currentInstance()) 5495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return; 55007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(new WebInspector.JavaScriptOutlineDialog(uiSourceCode, selectItemCallback)); 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.Dialog.show(view.element, filteredItemSelectionDialog); 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.JavaScriptOutlineDialog.prototype = { 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 55609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!MessageEvent} event 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 558591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _didBuildOutlineChunk: function(event) 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 56009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var data = /** @type {!WebInspector.JavaScriptOutlineDialog.MessageEventData} */ (event.data); 56109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var chunk = data.chunk; 562591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = 0; i < chunk.length; ++i) 563591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._functionItems.push(chunk[i]); 564591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 565d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (data.total === data.index + 1) 566591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.dispose(); 567591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 568591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.refresh(); 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 571591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 572591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @return {number} 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 574591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemCount: function() 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 576591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return this._functionItems.length; 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} itemIndex 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) itemKeyAt: function(itemIndex) 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._functionItems[itemIndex].name; 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {number} itemIndex 590591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 5915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @return {number} 5925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 593591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemScoreAt: function(itemIndex, query) 5945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 595591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var item = this._functionItems[itemIndex]; 596591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return -item.line; 5975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }, 5985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 5995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 600591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {number} itemIndex 601591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 602a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} titleElement 603a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} subtitleElement 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 605591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch renderItem: function(itemIndex, query, titleElement, subtitleElement) 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 607591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var item = this._functionItems[itemIndex]; 608591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch titleElement.textContent = item.name + (item.arguments ? item.arguments : ""); 609591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.highlightRanges(titleElement, query); 610591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch subtitleElement.textContent = ":" + (item.line + 1); 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 61409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?number} itemIndex 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} promptValue 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selectItem: function(itemIndex, promptValue) 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 61909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (itemIndex === null) 62009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lineNumber = this._functionItems[itemIndex].line; 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isNaN(lineNumber) && lineNumber >= 0) 62351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._selectItemCallback(lineNumber, this._functionItems[itemIndex].column); 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 626591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch dispose: function() 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 628591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._outlineWorker) { 629591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._outlineWorker.terminate(); 630591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._outlineWorker; 631591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 634591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch __proto__: WebInspector.SelectionDialogContentProvider.prototype 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 639591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @extends {WebInspector.SelectionDialogContentProvider} 640a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Map.<!WebInspector.UISourceCode, number>=} defaultScores 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 6425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)WebInspector.SelectUISourceCodeDialog = function(defaultScores) 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 644591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebInspector.SelectionDialogContentProvider.call(this); 645591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 646f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu this._populate(); 6475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) this._defaultScores = defaultScores; 648591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._scorer = new WebInspector.FilePathScoreFunction(""); 649591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebInspector.workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAdded, this); 650f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) WebInspector.workspace.addEventListener(WebInspector.Workspace.Events.ProjectRemoved, this._projectRemoved, this); 651926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 653926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.SelectUISourceCodeDialog.prototype = { 654f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) _projectRemoved: function(event) 655f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu { 656f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu var project = /** @type {!WebInspector.Project} */ (event.data); 657f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu this._populate(project); 658f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu this.refresh(); 659f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu }, 660f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 661f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu /** 662f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu * @param {!WebInspector.Project=} skipProject 663f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu */ 664f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu _populate: function(skipProject) 665f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu { 666f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu /** @type {!Array.<!WebInspector.UISourceCode>} */ 667f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu this._uiSourceCodes = []; 668f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu var projects = WebInspector.workspace.projects().filter(this.filterProject.bind(this)); 669f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu for (var i = 0; i < projects.length; ++i) { 670f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (skipProject && projects[i] === skipProject) 671f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu continue; 672f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu this._uiSourceCodes = this._uiSourceCodes.concat(projects[i].uiSourceCodes()); 673f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu } 674f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu }, 675f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 676926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 677a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {?WebInspector.UISourceCode} uiSourceCode 67853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number=} lineNumber 67909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number=} columnNumber 680926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 68109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) uiSourceCodeSelected: function(uiSourceCode, lineNumber, columnNumber) 682926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 683926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Overridden by subclasses 684926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 686926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 687a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Project} project 68809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 689926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 690926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filterProject: function(project) 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 692926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return true; 693926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Overridden by subclasses 694926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 696926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 697591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @return {number} 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 699591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemCount: function() 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 701591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return this._uiSourceCodes.length; 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} itemIndex 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) itemKeyAt: function(itemIndex) 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 710e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return this._uiSourceCodes[itemIndex].fullDisplayName(); 7115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }, 7125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 7135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 7145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {number} itemIndex 715591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 7165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @return {number} 7175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 718591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch itemScoreAt: function(itemIndex, query) 7195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 720591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var uiSourceCode = this._uiSourceCodes[itemIndex]; 721591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var score = this._defaultScores ? (this._defaultScores.get(uiSourceCode) || 0) : 0; 722591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!query || query.length < 2) 723591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return score; 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 725591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._query !== query) { 726591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._query = query; 727591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._scorer = new WebInspector.FilePathScoreFunction(query); 728591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 729591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 730e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch var path = uiSourceCode.fullDisplayName(); 731591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return score + 10 * this._scorer.score(path, null); 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 735591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {number} itemIndex 736591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} query 737a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} titleElement 738a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} subtitleElement 73909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!Array.<!Element>} 740591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 741591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch renderItem: function(itemIndex, query, titleElement, subtitleElement) 742591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 743591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch query = this.rewriteQuery(query); 744591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var uiSourceCode = this._uiSourceCodes[itemIndex]; 74509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) titleElement.textContent = uiSourceCode.displayName() + (this._queryLineNumberAndColumnNumber || ""); 746e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch subtitleElement.textContent = uiSourceCode.fullDisplayName().trimEnd(100); 747591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 748591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var indexes = []; 749e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch var score = new WebInspector.FilePathScoreFunction(query).score(subtitleElement.textContent, indexes); 750591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var fileNameIndex = subtitleElement.textContent.lastIndexOf("/"); 751591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var ranges = []; 752591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = 0; i < indexes.length; ++i) 753591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch ranges.push({offset: indexes[i], length: 1}); 754591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (indexes[0] > fileNameIndex) { 755591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for (var i = 0; i < ranges.length; ++i) 756591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch ranges[i].offset -= fileNameIndex + 1; 757591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return WebInspector.highlightRangesWithStyleClass(titleElement, ranges, "highlight"); 758591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } else { 759591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return WebInspector.highlightRangesWithStyleClass(subtitleElement, ranges, "highlight"); 760591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 76409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?number} itemIndex 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} promptValue 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selectItem: function(itemIndex, promptValue) 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 76909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var parsedExpression = promptValue.trim().match(/^([^:]*)(:\d+)?(:\d+)?$/); 77009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!parsedExpression) 7718abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return; 77209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 77309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var lineNumber; 77409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var columnNumber; 77509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (parsedExpression[2]) 77609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) lineNumber = parseInt(parsedExpression[2].substr(1), 10) - 1; 77709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (parsedExpression[3]) 77809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) columnNumber = parseInt(parsedExpression[3].substr(1), 10) - 1; 77909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var uiSourceCode = itemIndex !== null ? this._uiSourceCodes[itemIndex] : null; 78009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.uiSourceCodeSelected(uiSourceCode, lineNumber, columnNumber); 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} query 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rewriteQuery: function(query) 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!query) 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return query; 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) query = query.trim(); 79209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var lineNumberMatch = query.match(/^([^:]+)((?::[^:]*){0,2})$/); 79309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._queryLineNumberAndColumnNumber = lineNumberMatch ? lineNumberMatch[2] : ""; 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return lineNumberMatch ? lineNumberMatch[1] : query; 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 797926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 798a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Event} event 799926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 800926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _uiSourceCodeAdded: function(event) 801926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 802a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data); 803e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!this.filterProject(uiSourceCode.project())) 804926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 805926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._uiSourceCodes.push(uiSourceCode) 806591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.refresh(); 807926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 808926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 809926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) dispose: function() 810926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 811591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebInspector.workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAdded, this); 812f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) WebInspector.workspace.removeEventListener(WebInspector.Workspace.Events.ProjectRemoved, this._projectRemoved, this); 813591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 814591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 815591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch __proto__: WebInspector.SelectionDialogContentProvider.prototype 8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 819926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 820926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.SelectUISourceCodeDialog} 82107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @param {!WebInspector.SourcesView} sourcesView 822a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Map.<!WebInspector.UISourceCode, number>=} defaultScores 823926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 82407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.OpenResourceDialog = function(sourcesView, defaultScores) 825926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 8265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebInspector.SelectUISourceCodeDialog.call(this, defaultScores); 82707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch this._sourcesView = sourcesView; 828926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 829926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 830926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.OpenResourceDialog.prototype = { 831926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 832926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 8338abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @param {?WebInspector.UISourceCode} uiSourceCode 83453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number=} lineNumber 83509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number=} columnNumber 836926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 83709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) uiSourceCodeSelected: function(uiSourceCode, lineNumber, columnNumber) 838926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 8398abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (!uiSourceCode) 84007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch uiSourceCode = this._sourcesView.currentUISourceCode(); 8418abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (!uiSourceCode) 8428abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return; 84307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch this._sourcesView.showSourceLocation(uiSourceCode, lineNumber, columnNumber); 844926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 845926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 846926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 8478abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @param {string} query 8488abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @return {boolean} 8498abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) */ 8508abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) shouldShowMatchingItems: function(query) 8518abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 8528abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return !query.startsWith(":"); 8538abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) }, 8548abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 8558abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) /** 856a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Project} project 85709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 858926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 859926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filterProject: function(project) 860926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 861926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return !project.isServiceProject(); 862926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 863926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 864926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.SelectUISourceCodeDialog.prototype 865926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 866926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 867926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 86807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @param {!WebInspector.SourcesView} sourcesView 869a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} relativeToElement 87043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) * @param {string=} query 871a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Map.<!WebInspector.UISourceCode, number>=} defaultScores 872926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 87307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.OpenResourceDialog.show = function(sourcesView, relativeToElement, query, defaultScores) 874926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 875926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (WebInspector.Dialog.currentInstance()) 876926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 877926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 87807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(new WebInspector.OpenResourceDialog(sourcesView, defaultScores)); 879926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filteredItemSelectionDialog.renderAsTwoRows(); 88043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (query) 88143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) filteredItemSelectionDialog.setQuery(query); 882926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.Dialog.show(relativeToElement, filteredItemSelectionDialog); 883926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 884926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 885926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 886926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 887926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.SelectUISourceCodeDialog} 88810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch * @param {!Array.<string>} types 889a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.UISourceCode)} callback 890926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 89110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebInspector.SelectUISourceCodeForProjectTypesDialog = function(types, callback) 892926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 89310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch this._types = types; 894926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.SelectUISourceCodeDialog.call(this); 895926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._callback = callback; 896926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 897926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 89810f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebInspector.SelectUISourceCodeForProjectTypesDialog.prototype = { 899926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 900a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.UISourceCode} uiSourceCode 90153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number=} lineNumber 90209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number=} columnNumber 903926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 90409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) uiSourceCodeSelected: function(uiSourceCode, lineNumber, columnNumber) 905926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 906926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._callback(uiSourceCode); 907926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 908926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 909926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 910a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Project} project 91109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 912926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 913926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filterProject: function(project) 914926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 91510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return this._types.indexOf(project.type()) !== -1; 916926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 917926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 918926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.SelectUISourceCodeDialog.prototype 919926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 920926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 921926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 922f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {string} name 92310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch * @param {!Array.<string>} types 924a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.UISourceCode)} callback 925a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} relativeToElement 9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 92710f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebInspector.SelectUISourceCodeForProjectTypesDialog.show = function(name, types, callback, relativeToElement) 9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (WebInspector.Dialog.currentInstance()) 9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 93210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(new WebInspector.SelectUISourceCodeForProjectTypesDialog(types, callback)); 933926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filteredItemSelectionDialog.setQuery(name); 934926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) filteredItemSelectionDialog.renderAsTwoRows(); 9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.Dialog.show(relativeToElement, filteredItemSelectionDialog); 9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 93709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 93809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)/** 93909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @typedef {{index: number, total: number, chunk: !Array.<!{selectorText: string, lineNumber: number, columnNumber: number}>}} 94009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 94109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.JavaScriptOutlineDialog.MessageEventData; 942